http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf
题意:
构建一个包含1.。。。n长度的折线的矩形,长度为奇数的有奇数(正整数)个折点(1除外),长度为偶数的有偶数(正整数)个折点(2除外),输出矩形,从1到n,依次输出每个折线,折线按点的顺序输出。
分析:
构造题,特例1和2
代码:
#include<bits/stdc++.h>
using namespace std;
int k,m,n,nn,t;
int nex[]={1,2,3,0};
int dxy[]={0,-1,0,1,-1,0,-1,0};
int main()
{
while(scanf("%d",&nn)!=EOF)
{
if(nn==2) {printf("1 3\n1 1\n1 2 1 3\n");continue;}
int n=(nn+1)*nn/2;
int w=(nn+1)/2;
int h=n/w;
int x=(nn&1)?1:3;
int y=1,k=1;
printf("%d %d\n",h,w);
for(int i=1;i<=nn;)
{
if(i&1)
{
t=0;k=0;
while(k+1<i)
{
k++;
printf("%d %d ",x,y);
x+=dxy[t];
y+=dxy[t+4];
t=nex[t];
}
printf("%d %d\n",x,y);
x=h-i;
i++;
y=w-(i/2)+1;
}
else
{
int yy=y;
while(y<=w) printf("%d %d ",x,y),y++;
y--;x--;
while(y>yy) printf("%d %d ",x,y),y--;
printf("%d %d\n",x,y);
i++;
x=(nn&1)?i:i+2;
y=(i+1)/2;
}
}
}
return 0;
}