I - Snake Carpet UVALive - 7269
题意:构造出一个矩阵,使得矩阵含有n条蛇,每条蛇的长度是1到n,并且奇数长度的蛇有奇数个拐弯,偶数长度的蛇有偶数个拐弯.
5 5 5 3 3 5 4 4 3 2 5 4 4 1 2 5 5 5 3 3 6 6 5 4 4 3 2 6 6 5 4 4 1 2 6 6 5 5 5 3 3 6 6 5 4 4 3 2 6 6 5 4 4 1 2 7 6 7 7 7 7 7 7 6
特判1-5的
其他就是偶数放右,奇数放左
#include <bits/stdc++.h>
using namespace std;
int n;
void shuchu()
{
if(n==1)
{
printf("1 1\n");
printf("1 1\n");
}
else if(n==2)
{
printf("1 3\n");
printf("1 1\n");
printf("1 2 1 3\n");
}
else if(n==3)
{
printf("2 3\n");
printf("1 2\n");
printf("1 3 2 3\n");
printf("1 1 2 1 2 2\n");
}
else if(n==4)
{
printf("2 5\n");
printf("1 4\n");
printf("1 5 2 5\n");
printf("1 1 2 1 2 2\n");
printf("1 2 1 3 2 3 2 4\n");
}
else if(n==5)
{
printf("3 5\n");
printf("3 4\n");
printf("1 4 1 5\n");
printf("2 4 2 5 3 5\n");
printf("2 2 2 3 3 3 3 2\n");
printf("3 1 2 1 1 1 1 2 1 3\n");
}
}
int main()
{
while(~scanf("%d",&n))
{
if(n<=5)
{
shuchu();
continue;
}
if(n%2) printf("%d %d\n",(n+1)/2,n);
else printf("%d %d\n",n/2,n+1);
printf("3 4\n");
printf("1 4 1 5\n");
printf("2 4 2 5 3 5\n");
printf("2 2 2 3 3 3 3 2\n");
printf("3 1 2 1 1 1 1 2 1 3\n");
for(int i=6;i<=n;i++)
{
if(!(i%2))
{
int t=i/2;
if(i==n)
{
for(int j=t;j>=1;j--)
{
//cout<<j<<" "<<i<<" ";
printf("%d %d ",j,i);
}
for(int j=1;j<=t;j++)
{
if(j!=t) printf("%d %d ",j,i+1);
else printf("%d %d\n",j,i+1);
}
}
else
{
for(int j=t-1;j>=1;j--) printf("%d %d ",j,i);
for(int j=1;j<=t+1;j++)
{
if(j!=t+1) printf("%d %d ",j,i+1);
else printf("%d %d\n",j,i+1);
}
}
}
else
{
for(int j=1;j<=i-1;j++) printf("%d %d ",(i+1)/2,j);
printf("%d %d\n",(i-1)/2,i-1);
}
}
}
return 0;
}