Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

好神奇的退役贴,表示看不懂

Posted by DieIng at 2010-02-10 17:08:58
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator