1. 程式人生 > >Problem G. Green Day(從圖中找k棵結構相同的樹)

Problem G. Green Day(從圖中找k棵結構相同的樹)

題意:

有一個多邊形,你從中分出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); } } }