思路:

  多画画就发现从五的时候可以这么填:

UVALive - 7269 I - Snake Carpet-LMLPHP

  六的时候这么填:

UVALive - 7269 I - Snake Carpet-LMLPHP

七的时候这么填:

UVALive - 7269 I - Snake Carpet-LMLPHP

看出规律了吗?

没看出的话再画画把。

 #include <bits/stdc++.h>

 using namespace std;

 #define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-;
const double pi=acos(-1.0);
const int K=1e6+;
const int mod=1e9+; int main(void)
{
int n,h,w;
//freopen("out.acm","w",stdout);
while(~scanf("%d",&n))
{
if(n==) printf("1 1\n1 1\n");
else if(n==) printf("1 3\n1 1\n1 2 1 3\n");
else if(n==) printf("2 3\n1 2\n1 3 2 3\n1 1 2 1 2 2\n");
else if(n==)
printf("2 5\n1 2\n1 3 2 3\n1 1 2 1 2 2\n2 4 1 4 1 5 2 5\n");
else if(n==)
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");
else
{
h=(n+)/,w=(n/-)*+;
printf("%d %d\n",h,w);
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");
for(int i=;i<=n;i++)
if(i&)
{
int x=(i+)/,j=;
while(j<i)
printf("%d %d ",x,j++);
printf("%d %d\n",x-,j-);
}
else
{
int x=i/-+(i==n),mx=i/+(i!=n);
while(x)
printf("%d %d ",x--,i);
x=;
while(x<mx)
printf("%d %d ",x++,i+);
printf("%d %d\n",x,i+);
}
}
}
return ;
}
05-11 03:48