UVALive - 7269 I - Snake Carpet
思路:
多画画就发现从五的时候可以这么填:
六的时候这么填:
七的时候这么填:
看出规律了吗?
没看出的话再画画把。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define MP make_pair 6 #define PB push_back 7 typedef long long LL; 8 typedef pair<int,int> PII; 9 const double eps=1e-8; 10 const double pi=acos(-1.0); 11 const int K=1e6+7; 12 const int mod=1e9+7; 13 14 15 int main(void) 16 { 17 int n,h,w; 18 //freopen("out.acm","w",stdout); 19 while(~scanf("%d",&n)) 20 { 21 if(n==1) printf("1 1\n1 1\n"); 22 else if(n==2) printf("1 3\n1 1\n1 2 1 3\n"); 23 else if(n==3) printf("2 3\n1 2\n1 3 2 3\n1 1 2 1 2 2\n"); 24 else if(n==4) 25 printf("2 5\n1 2\n1 3 2 3\n1 1 2 1 2 2\n2 4 1 4 1 5 2 5\n"); 26 else if(n==5) 27 printf("3 5\n1 2\n3 4 3 5\n1 1 2 1 2 2\n2 4 1 4 1 5 2 5\n3 1 3 2 3 3 2 3 1 3\n"); 28 else 29 { 30 h=(n+1)/2,w=(n/2-1)*2+3; 31 printf("%d %d\n",h,w); 32 printf("1 2\n3 4 3 5\n1 1 2 1 2 2\n2 4 1 4 1 5 2 5\n3 1 3 2 3 3 2 3 1 3\n"); 33 for(int i=6;i<=n;i++) 34 if(i&1) 35 { 36 int x=(i+1)/2,j=1; 37 while(j<i) 38 printf("%d %d ",x,j++); 39 printf("%d %d\n",x-1,j-1); 40 } 41 else 42 { 43 int x=i/2-1+(i==n),mx=i/2+(i!=n); 44 while(x) 45 printf("%d %d ",x--,i); 46 x=1; 47 while(x<mx) 48 printf("%d %d ",x++,i+1); 49 printf("%d %d\n",x,i+1); 50 } 51 } 52 } 53 return 0; 54 }
作者:weeping
出处:www.cnblogs.com/weeping/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。