Problem G. Green Day(從圖中找k棵結構相同的樹)
阿新 • • 發佈:2018-12-15
題意:
有一個多邊形,你從中分出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);
}
}
}