记录编号 |
39076 |
评测结果 |
AAAAAAAAAA |
题目名称 |
椰子 |
最终得分 |
100 |
用户昵称 |
TBK |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.284 s |
提交时间 |
2012-07-04 14:48:27 |
内存使用 |
23.24 MiB |
显示代码纯文本
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <set>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
int a[3001][1001][2],b,c,d,l,m,n,r[1001][2];
void gui(int x,int y,int z,int k)
{
int i,j;
if (z==1)
{
a[y][z][0]=x;
a[y][z][1]=k;
r[x][0]=y;
r[x][1]=z;
return;
}
if (a[y][z-1][0]==0) gui(x,y,z-1,k);
if ((a[y-1][z-1][0]!=0)&&(a[y+1][z-1][0]!=0))
{
a[y][z][0]=x;
a[y][z][1]=k;
r[x][0]=y;
r[x][1]=z;
return;
}
else if ((a[y-1][z-1][0]==0)&&(a[y+1][z-1][0]==0))
{
if (k>a[y][z-1][1])
{
i=a[y][z-1][0];
j=a[y][z-1][1];
a[y][z-1][0]=x;
a[y][z-1][1]=k;
r[x][0]=y;
r[x][1]=z-1;
gui(i,y+1,z-1,j);
}
else gui(x,y-1,z-1,k);
}
else
{
if (a[y-1][z-1][0]==0)
{
if (k>a[y][z-1][1])
{
i=a[y][z-1][0];
j=a[y][z-1][1];
a[y][z-1][0]=x;
a[y][z-1][1]=k;
r[x][0]=y;
r[x][1]=z-1;
gui(i,y-1,z-1,j);
}
else gui(x,y-1,z-1,k);
}
else
{
if (k>a[y][z-1][1])
{
i=a[y][z-1][0];
j=a[y][z-1][1];
a[y][z-1][0]=x;
a[y][z-1][1]=k;
r[x][0]=y;
r[x][1]=z-1;
gui(i,y+1,z-1,j);
}
else gui(x,y+1,z-1,k);
}
}
}
int main(void)
{
freopen("coconuts.in","r",stdin);
freopen("coconuts.out","w",stdout);
scanf("%d",&b);
for (c=0;c<b;c++)
{
scanf("%d",&d);
memset(a,0,sizeof(a));
memset(r,0,sizeof(r));
for (l=1;l<=d;l++)
{
scanf("%d%d",&m,&n);
m+=1000;
int k;
for (k=1;k<=1000;k++)
if (a[m][k][0]==0) break;
gui(l,m,k,n);
}
for (l=1;l<=d;l++) printf("%d %d\n",r[l][1],r[l][0]-1000);
printf("\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}