Posted on 2010-08-12 12:16
Uriel 阅读(503)
评论(0) 编辑 收藏 引用 所属分类:
POJ 、
模拟
集训结束了,最后一天想切道水题休息休息,结果被虐一晚上。。。
看了Discuss才知道题目都理解错了。。晚上回宿舍改改,早上终于AC了。。
//Problem: 1208 User: Uriel
//Memory: 364K Time: 0MS
//Language: G++ Result: Accepted
//Simulation
//2010.08.12
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int n,pile[30][30],np[30];


int main()
{
int i,j,k,n1,n2,fi,fj;
char s1[6],s2[6];
scanf("%d",&n);

for(i=0;i<n;i++)
{
pile[i][0]=i;
np[i]=1;
}

while(1)
{
scanf("%s",s1);
if(strcmp(s1,"quit")==0)break;
scanf("%d %s %d",&n1,s2,&n2);

if(strcmp(s1,"move")==0)
{//-----------------------------move

if(strcmp(s2,"onto")==0)
{

for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{

if(pile[i][j]==n1)
{
fi=i;fj=j;goto f1;
}
}
}

f1: for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{
if(pile[i][j]==n2)goto sov1;
}
}
sov1: if(fi==i)continue;

for(k=j+1;k<np[i];k++)
{
pile[pile[i][k]][0]=pile[i][k];
np[pile[i][k]]=1;
}

for(k=fj+1;k<np[fi];k++)
{
pile[pile[fi][k]][0]=pile[fi][k];
np[pile[fi][k]]=1;
}
np[i]=j+2;
np[fi]=fj;
pile[i][j+1]=n1;
}

else
{

for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{

if(pile[i][j]==n1)
{
fi=i;fj=j;goto f2;
}
}
}

f2: for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{
if(pile[i][j]==n2)goto sov2;
}
}
sov2: if(fi==i)continue;

for(k=fj+1;k<np[fi];k++)
{
pile[pile[fi][k]][0]=pile[fi][k];
np[pile[fi][k]]=1;
}
np[fi]=fj;
pile[i][np[i]]=n1;
np[i]++;
}
}

else
{//-------------------------------------------------pile

if(strcmp(s2,"onto")==0)
{

for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{

if(pile[i][j]==n1)
{
fi=i;fj=j;goto f3;
}
}
}

f3: for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{
if(pile[i][j]==n2)goto sov3;
}
}
sov3: if(fi==i)continue;

for(k=j+1;k<np[i];k++)
{
pile[pile[i][k]][0]=pile[i][k];
np[pile[i][k]]=1;
}
for(k=1;k<=np[fi]-fj;k++)
pile[i][k+j]=pile[fi][fj+k-1];
np[i]=j+1;
np[i]+=np[fi]-fj;
np[fi]=fj;
}

else
{

for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{

if(pile[i][j]==n1)
{
fi=i;fj=j;goto f4;
}
}
}

f4: for(i=0;i<n;i++)
{

for(j=0;j<np[i];j++)
{
if(pile[i][j]==n2)goto sov4;
}
}
sov4: if(fi==i)continue;
for(k=0;k<np[fi]-fj;k++)
pile[i][np[i]+k]=pile[fi][fj+k];
np[i]+=np[fi]-fj;
np[fi]-=np[fi]-fj;
}
}
}

for(i=0;i<n;i++)
{
printf("%d:",i);
for(j=0;j<np[i];j++)printf(" %d",pile[i][j]);
puts("");
}
return 0;
}