51 Nod 1804 小C的多边形

                             1804 小C的多边形
小C偶然发现了一个奇妙的n个点的多边形。现在你需要给外圈的边标记上1~n-1,里圈的边也标记上1~n-1,使得对于一个外圈相邻点与中间点构成的三角形的边权之和都相等。
图中带三角形的三个点构成的三角形的边权都要相等。
你需要输出一种标记方案。(如果不存在就输出0)
Input
一共一行。
第一行,有一个n(4<=n<=1,000,000)。
Output
第一行n-1个数表示顺时针方向外圈的的边权(ai)。
第二行n-1个数表示顺时针方向里圈的的边权(bi)。
并且a1和b1,b2构成第1个三角形,a2和b2,b3构成第2个三角形....,an-1和bn-1,b1构成第n-1个三角形。具体请参看样例!
Input示例
4
Output示例
1 2 3
2 3 1

思路:一道找规律的题目,
   强调一下 这个是一个多边形 平面多边形 不是立体的!!!
   题意 就是给你n个点 组成一个n-1个点的多边形 剩下的一个点 放在多边形的中间
   要求给多边形的边赋上一个权值 再给n-1个点与 中间的点连线产生的边赋一个值 使得所有构成的三角形的quanzhizhihe相同
   

   如图中的五边形

   我们有如下等式

   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+e+d==5+a+e --> d==1+a

   我们可以得出 关于 a,b,c,d,e 的关系 :  b>d>a>c>e 

   观察可以得到 这是隔一条线段 加一次的 照着规律写就可以了

   ps:友情提示! 

   这道题他卡输入!! 0(n) 做法会超时!!

   要写 化!!!

不过有个dalao cout竟然没有被卡!! 链接:http://blog.csdn.net/jinbaosite/article/details/71056174

 1 #include <cstdio>
 2 
 3 using namespace std;
 4 
 5 const int MAXN=1000010;
 6 
 7 int n,a[MAXN];
 8 
 9 void print(int x){
10     if(x>=10) print(x/10);
11     putchar(x%10+'0');
12 }  
13 
14 int hh() {
15     scanf("%d",&n);
16     if(n&1) printf("0\n");
17     else {
18         --n;
19         int s=n,k=1;
20         while(1) {
21             a[k]=s,--s;
22             if(k==n-1) break;
23             k+=2;
24             if(k>=n) k-=n;
25         }
26         for(int i=1; i<=n; ++i) print(i),putchar(' ');
27         printf("\n");
28         for(int i=0; i<n; ++i) print(a[i]),putchar(' ');
29     }
30     
31     return 0;
32 }
33 
34 int sb=hh();
35 int main(int argc,char**argv) {;}
代码  
posted @ 2017-10-25 19:00  拿叉插猹哈  阅读(154)  评论(0编辑  收藏  举报