| ||||||||||
| 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 | |||||||||
好神奇的退役贴,表示看不懂In Reply To:4流学校4流选手的退役贴 Posted by:4FlowConstant at 2010-02-09 23:36:58 > #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