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

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