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 }

 

posted @ 2017-10-18 15:49  weeping  阅读(305)  评论(1编辑  收藏  举报