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

Re:3414已解决

Posted by zsc08_hyq at 2009-11-25 22:59:19
In Reply To:3414已解决 Posted by:zsc08_hyq at 2009-11-25 22:55:54
#include<iostream>
using namespace std;
struct pot
{
    int a,b,n,c[10205];
}key[10205];
void copy(int e[],int f[])
{
	for(int ii=0;ii<10205&&f[ii]!=0;ii++)
		e[ii]=f[ii];
}
void hh(int x1,int x2,int i,int &j,int nn,int k[][105])
{
    key[j].a=x1;key[j].b=x2;
    k[x1][x2]=1;
	copy(key[j].c,key[i].c);
	key[j].c[key[i].n]=nn;
    key[j++].n=key[i].n+1;
}
int main()
{
    int A,B,C,i,j,x,x1,x2,k[105][105];
    while(scanf("%d%d%d",&A,&B,&C)!=EOF)
    {
		if(C==0) printf("0\n");
        else if(A==C) printf("1\nFILL(1)\n");
		else if(C==B) printf("1\nFILL(2)\n");
		else if(A<0||B<0||C<0) printf("impossible\n");
        else
        {
            memset(k,0,sizeof(k));
			key[0].a=0;
			key[0].b=0;
            key[0].n=0;
			memset(key[0].c,0,sizeof(key[0].c));
            i=0;
            j=1;
			x1=0;
			x2=0;
            while(i<j&&i<10205)
            {
				if(key[i].a!=A) 
				{
					x1=A;
					x2=key[i].b;
				}
                if(!k[x1][x2]) hh(x1,x2,i,j,1,k);
				if(key[i].a!=0) 
				{
					x1=0;
					x2=key[i].b;
				}
                if(!k[x1][x2]) hh(x1,x2,i,j,2,k);
				if(key[i].a!=0&&key[i].b!=B) 
				{
					x=key[i].b+key[i].a;
					x2=(x<B)?x:B;
					x1=key[i].a-x2+key[i].b;
				}
				if(x1==C||x2==C) 
				{
					key[i].c[key[i].n]=3;
					break;
				}
                if(!k[x1][x2]) hh(x1,x2,i,j,3,k);
				if(key[i].b!=B) 
				{
					x1=key[i].a;
					x2=B;
				}
                if(!k[x1][x2]) hh(x1,x2,i,j,4,k);
				if(key[i].b!=0) 
				{
					x1=key[i].a;
					x2=0;
				}
                if(!k[x1][x2]) hh(x1,x2,i,j,5,k);
				if(key[i].a!=A&&key[i].b!=0) 
				{
					x=key[i].b+key[i].a;
					x1=(x<A)?x:A;
					x2=key[i].b-x1+key[i].a;
				}
				if(x1==C||x2==C) 
				{
					key[i].c[key[i].n]=6;
					break;
				}
                if(!k[x1][x2]) hh(x1,x2,i,j,6,k);
                i++;
            }
			if(x1==C||x2==C) 
			{
				printf("%d\n",key[i].n+1);
				for(int ii=0;ii<=key[i].n;ii++)
				{
					switch(key[i].c[ii]) 
					{
					case 1:printf("FILL(1)\n");break;
					case 2:printf("DROP(1)\n");break;
					case 3:printf("POUR(1,2)\n");break;
					case 4:printf("FILL(2)\n");break;
					case 5:printf("DROP(2)\n");break;
					case 6:printf("POUR(2,1)\n");break;
					}
				}
			}
			else printf("impossible\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