| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
4流学校4流选手的退役贴#include <iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct node2
{
int flag;
int prex;
int prey;
};
struct node
{
int x;
int y;
};
node line[10000000];
node record[100000];
node2 data[201][201];
int main ()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int front=1;
int rear=1;
line[1].x=0;
line[1].y=0;
while(front<=rear)
{
if(line[front].x==c||line[front].y==c)
break;
if(data[line[front].x][line[front].y].flag==0)
{
data[line[front].x][line[front].y].flag=1;
if(line[front].x!=a&&data[a][line[front].y].flag==0&&data[a][line[front].y].prex==0&&data[a][line[front].y].prey==0)
{
rear++;
line[rear].x=a;
line[rear].y=line[front].y;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
if(line[front].y!=b&&data[line[front].x][b].flag==0&&data[line[front].x][b].prex==0&&data[line[front].x][b].prey==0)
{
rear++;
line[rear].x=line[front].x;
line[rear].y=b;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
if(line[front].x!=0&&data[0][line[front].y].flag==0&&data[0][line[front].y].prex==0&&data[0][line[front].y].prey==0)
{
rear++;
line[rear].x=0;
line[rear].y=line[front].y;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
if(line[front].y!=0&&data[line[front].x][0].flag==0&&data[line[front].x][0].prex==0&&data[line[front].x][0].prey==0)
{
rear++;
line[rear].x=line[front].x;
line[rear].y=0;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
if(line[front].x!=0&&line[front].y!=b)
{
if(line[front].x+line[front].y>b&&data[line[front].x-b+line[front].y][b].flag==0&&data[line[front].x-b+line[front].y][b].prex==0&&data[line[front].x-b+line[front].y][b].prey==0)
{
rear++;
int temp;
temp=b-line[front].y;
line[rear].x=line[front].x-temp;
line[rear].y=b;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
else if(data[0][line[front].x+line[front].y].flag==0&&data[0][line[front].x+line[front].y].prex==0&&data[0][line[front].x+line[front].y].prey==0)
{
rear++;
int temp;
line[rear].x=0;
line[rear].y=line[front].x+line[front].y;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
}
/**/////////////////////////////////////////////////////////////////////////////
if(line[front].y!=0&&line[front].x!=a)
{
if(line[front].x+line[front].y>a&&data[a][line[front].y-a+line[front].x].flag==0&&data[a][line[front].y-a+line[front].x].prex==0&&data[a][line[front].y-a+line[front].x].prey==0)
{
int temp;
rear++;
temp=a-line[front].x;
line[rear].y=line[front].y-temp;
line[rear].x=a;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
else if(data[line[front].x+line[front].y][0].flag==0&&data[line[front].x+line[front].y][0].prex==0&&data[line[front].x+line[front].y][0].prey==0)
{
int temp;
rear++;
line[rear].y=0;
line[rear].x=line[front].x+line[front].y;
data[line[rear].x][line[rear].y].prex=line[front].x;
data[line[rear].x][line[rear].y].prey=line[front].y;
}
}
}
front++;
}
if(front>rear)
{
printf("impossible\n");
return 0;
}
int pos=1;
int markx=line[front].x;
int marky=line[front].y;
int tempx;
int tempy;
while(1)
{
if(markx==0&&marky==0)
{
break;
}
record[pos].x=markx;
record[pos].y=marky;
int tempx=markx;
int tempy=marky;
markx=data[tempx][tempy].prex;
marky=data[tempx][tempy].prey;
pos++;
}
record[pos].x=0;
record[pos].y=0;
printf("%d\n",pos-1);
int i;
for(i=pos;i>=2;i--)
{
if(record[i].x==0&&record[i-1].x==a&&record[i].y==record[i-1].y)
printf("FILL(1)\n");
else if(record[i].y==0&&record[i-1].y==b&&record[i].x==record[i-1].x)
printf("FILL(2)\n");
else if(record[i].x!=0&&record[i-1].x==0&&record[i].y==record[i-1].y)
printf("DROP(1)\n");
else if(record[i].y!=0&&record[i-1].y==0&&record[i].x==record[i-1].x)
printf("DROP(2)\n");
else if(record[i].x>record[i-1].x)
printf("POUR(1,2)\n");
else if(record[i].x<record[i-1].x)
printf("POUR(2,1)\n");
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator