原题: https://cn.vjudge.net/problem/Gym-100962G
题意:
有一个多边形,你从中分出k棵结构完全相同的树,每两棵树之间不会有重边,输出这个多边形的边数,及每棵树的所有边
解析:
很水的题想不到却很难。计算一下就知道这个多边形应该是2k边。如果一个正2k边形画成完全图,有一个结论:除了对立顶点所连的边以外,其他边都可以找到一条与之中心对称的边。
而题目要求结构完全相同,说明这些树可以通过中心旋转变成另一棵树。那么首先确定的是:对立点所连的边一定是平均分配的
画出来后心中百般滋味。。
证明正确性:
中间的那条不会重复,所以我们对于这个树的其他边都从这条边出发。也就意味着和中间的那条边所形成的那个夹角不会再次出现,证毕。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;scanf("%d",&n);
printf("%d\n",2*n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int to=i+j;
if(to>2*n)to-=2*n;
printf("%d %d\n",i,to);
}
for(int j=1;j<n;j++){
int to=i+n+j;
if(to>2*n)to-=2*n;
printf("%d %d\n",i+n,to);
}
}
}