51 Nod 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) {;}
作者:乌鸦坐飞机
出处:http://www.cnblogs.com/whistle13326/
新的风暴已经出现
怎么能够停止不前
穿越时空 竭尽全力
我会来到你身边
微笑面对危险
梦想成真不会遥远
鼓起勇气 坚定向前
奇迹一定会出现