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

C++ac,G++wa是什么原因导致的??呜呜呜呜

Posted by born_again at 2019-12-24 21:07:30 on Problem 3414 and last updated at 2019-12-24 21:11:07
#include<iostream>
#include<queue>
using namespace std;
const int N=105;
int x[N][N],y[500000][5];
int a,b,c;
struct node {
	int x,y;
};
node Start,Cur,Next;
int bfs() {
	queue<node> q;
	q.push(Start);
	while(q.size()) {
		Cur=q.front();
		q.pop();
		Next.x=a;
		Next.y=Cur.y;
		if(x[Next.x][Next.y]==0) {
			x[Next.x][Next.y]=x[Cur.x][Cur.y]+1;
			if(Next.x==c||Next.y==c)
				return x[Next.x][Next.y];
			q.push(Next);
		}
		Next.x=Cur.x;
		Next.y=b;
		if(x[Next.x][Next.y]==0) {
			x[Next.x][Next.y]=x[Cur.x][Cur.y]+1;
			if(Next.x==c||Next.y==c)
				return x[Next.x][Next.y];
			q.push(Next);
		}
		Next.x=min(a,Cur.x+Cur.y);
		Next.y=max(0,Cur.x+Cur.y-a);
		if(x[Next.x][Next.y]==0) {
			x[Next.x][Next.y]=x[Cur.x][Cur.y]+1;
			if(Next.x==c||Next.y==c)
				return x[Next.x][Next.y];
			q.push(Next);
		}
		Next.y=min(b,Cur.x+Cur.y);
		Next.x=max(0,Cur.x+Cur.y-b);
		if(x[Next.x][Next.y]==0) {
			x[Next.x][Next.y]=x[Cur.x][Cur.y]+1;
			if(Next.x==c||Next.y==c)
				return x[Next.x][Next.y];
			q.push(Next);
		}
		Next.x=0;
		Next.y=Cur.y;
		if(x[Next.x][Next.y]==0) {
			x[Next.x][Next.y]=x[Cur.x][Cur.y]+1;
			if(Next.x==c||Next.y==c)
				return x[Next.x][Next.y];
			q.push(Next);
		}
		Next.x=Cur.x;
		Next.y=0;
		if(x[Next.x][Next.y]==0) {
			x[Next.x][Next.y]=x[Cur.x][Cur.y]+1;
			if(Next.x==c||Next.y==c)
				return x[Next.x][Next.y];
			q.push(Next);
		}
	}
	return -1;
}
int main() {
	int p,ansx=-1,ansy=-1,o=0,ans,flag;
	cin>>a>>b>>c;
	Start.x=Start.y=0;
	p=bfs();
	if(p==-1)
		cout<<"impossible";
	else {
		if(ansx==-1&&ansy==-1) {
			for(int i=0; i<=a; i++) {
				if(x[i][c]==p) {
					ansx=i;
					ansy=c;
					break;
				}
			}
		}
		if(ansx==-1&&ansy==-1) {
			for(int i=0; i<=b; i++) {
				if(x[c][i]==p) {
					ansx=c;
					ansy=i;
					break;
				}
			}
		}
		while(ans!=0) {
			ans=x[ansx][ansy];
			if(ansx==a) {
				flag=0;
				for(int i=0; i<a; i++) {
					if(x[i][ansy]==ans-1) {
						ansx=i;
						y[o][0]=1;
						y[o++][1]=1;
						flag=1;
						break;
					}
				}
				if(flag)
					continue;
			}
			if(ansy==b) {
				flag=0;
				for(int i=0; i<b; i++) {
					if(x[ansx][i]==ans-1) {
						ansy=i;
						y[o][0]=1;
						y[o++][1]=2;
						flag=1;
						break;
					}
				}
				if(flag)
					continue;
			}
			if(ansx==0) {
				flag=0;
				for(int i=1; i<=a; i++) {
					if(x[i][ansy]==ans-1) {
						ansx=i;
						y[o][0]=2;
						y[o++][1]=1;
						flag=1;
						break;
					}
				}
				if(flag)
					continue;
			}
			if(ansy==0) {
				flag=0;
				for(int i=1; i<=b; i++) {
					if(x[ansx][i]==ans-1) {
						ansy=i;
						y[o][0]=2;
						y[o++][1]=2;
						flag=1;
						break;
					}
				}
				if(flag)
					continue;
			}
			flag=0;
			for(int i=1; i<=min(a-ansx,ansy); i++) {
				if(x[ansx+i][ansy-i]==ans-1) {
					ansx+=i;
					ansy-=i;
					y[o][0]=3;
					y[o][1]=1;
					y[o++][2]=2;
					flag=1;
					break;
				}
			}
			if(flag)
				continue;
			flag=0;
			for(int i=1; i<=min(ansx,b-ansy); i++) {
				if(x[ansx-i][ansy+i]==ans-1) {
					ansx-=i;
					ansy+=i;
					y[o][0]=3;
					y[o][1]=2;
					y[o++][2]=1;
					flag=1;
					break;
				}
			}
			if(flag)
				continue;
		}
		cout<<p<<endl;
		for(int i=o-1; i>=0; i--) {
			if(y[i][0]==1)
				cout<<"FILL("<<y[i][1]<<")\n";
			else if(y[i][0]==2)
				cout<<"DROP("<<y[i][1]<<")\n";
			else
				cout<<"POUR("<<y[i][1]<<","<<y[i][2]<<")\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