Problem G. Green Day(从图中找k棵结构相同的树)

原题: 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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/jk_chen_acmer/article/details/83064375