【51Nod】1804 小C的多边形

来源:互联网 发布:js md5 sha1 消耗时间 编辑:程序博客网 时间:2024/05/17 16:44

题意

小C偶然发现了一个奇妙的n个点的多边形。现在你需要给外圈的边标记上1~n-1,里圈的边也标记上1~n-1,使得对于一个外圈相邻点与中间点构成的三角形的边权之和都相等。

解题思路

以五边形为例

根据题意,我们可以得到
1+a+b=2+b+c –> a=1+c
2+b+c=3+c+d –> b=1+d
3+c+d=4+d+e –> c=1+e
4+d+e=5+e+a –> d=1+a
也就是b->d->a->c->e(5->4->3->2->1)
可以发现顺时针方向,b值取最大,从b开始,相隔一条线的值差为1,即,第k条线的值为x,则第(k+2)%n条线的值为x+1,即a[k]=a[(k+2)%n]+1。
所以,n个点的多边行,n必须为偶数。

参考代码

#include <iostream>using namespace std;int a[1000000+1];int main(){    int n;    while (cin>>n){        n--;        if (n%2==0){            cout<<0<<endl;            continue;        }        int k=1,num=n;        while (1){            a[k]=num--;            if (k==n-1) break;            k=(k+2)%n;        }        for (int i=0;i<n-1;i++)            cout<<i+1<<" ";        cout<<n<<endl;        for (int i=0;i<n-1;i++)            cout<<a[i]<<" ";        cout<<a[n-1]<<endl;    }    return 0;}
0 0
原创粉丝点击