比赛 2025暑期集训第7场 评测结果 AAAAAAAAAA
题目名称 倒水 最终得分 100
用户昵称 彭欣越 运行时间 0.029 s
代码语言 C++ 内存使用 3.77 MiB
提交时间 2025-08-11 17:00:05
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=310;
int a,b,c,x,cnt;
int vis[N][N][N];
struct node {
	int x,y,z;
	int idx;
};
queue<node>q;
void bfs () {
	vis[a][0][0]=1;
	q.push((node){a,0,0,0});
	while (!q.empty()) {
		cnt++;
		if (cnt>100000) {
			break;
		}
		node u=q.front();
		q.pop();
		if (u.x==x||u.y==x||u.z==x) {
			cout << u.idx <<endl;
			return;
		}
		if (u.x!=a) {
			if (a-u.x<=u.y) {
				if (!vis[a][u.y-a+u.x][u.z]) {
					q.push((node){a,u.y-a+u.x,u.z,u.idx+1});
					vis[a][u.y-a+u.x][u.z]=1; 
				}
			}else{
				if (!vis[u.x+u.y][0][u.z]) {
					q.push((node){u.x+u.y,0,u.z,u.idx+1});
					vis[u.x+u.y][0][u.z]=1;
				}
			}
			if (a-u.x<=u.z) {
				if (!vis[a][u.y][u.z-a+u.x]) {
					q.push((node){a,u.y,u.z-a+u.x,u.idx+1});
					vis[a][u.y][u.z-a+u.x]=1;
				}
			}else{
				if (!vis[u.x+u.z][u.y][0]) {
					q.push((node){u.x+u.z,u.y,0,u.idx+1});
					vis[u.x+u.z][u.y][0]=1;
				}
			}
		}
		if (u.y!=b) {
			if (b-u.y<=u.x) {
				if (!vis[u.x-b+u.y][b][u.z]) {
					q.push((node){u.x-b+u.y,b,u.z,u.idx+1});
					vis[u.x-b+u.y][b][u.z]=1;
				}
			}else{
				if (!vis[0][u.x+u.y][u.z]) {
					q.push((node){0,u.x+u.y,u.z,u.idx+1});
					vis[0][u.x+u.y][u.z]=1;
				}
			}
			if (b-u.y<=u.z) {
				if (!vis[u.x][b][u.z-b+u.y]) {
					q.push((node){u.x,b,u.z-b+u.y,u.idx+1});
					vis[u.x][b][u.z-b+u.y]=1;
				}
			}else{
				if (!vis[u.x][u.y+u.z][0]) {
					q.push((node){u.x,u.y+u.z,0,u.idx+1});
					vis[u.x][u.y+u.z][0]=1;
				}
			}
		}
		if (u.z!=c) {
			if (c-u.z<=u.x) {
				if (!vis[u.x-c+u.z][u.y][c]) {
				    q.push((node){u.x-c+u.z,u.y,c,u.idx+1});
					vis[u.x-c+u.z][u.y][c]=1;
				}
			}else{
				if (!vis[0][u.y][u.z+u.x]) {
					q.push((node){0,u.y,u.z+u.x,u.idx+1});
					vis[0][u.y][u.z+u.x]=1;
				}
			}
			if (c-u.z<=u.y) {
				if (!vis[u.x][u.y-c+u.z][c]) {
					q.push((node){u.x,u.y-c+u.z,c,u.idx+1});
					vis[u.x][u.y-c+u.z][c]=1;
				}
			}else{
				if (!vis[u.x][0][u.z+u.y]) {
				    q.push((node){u.x,0,u.z+u.y,u.idx+1});
					vis[u.x][0][u.z+u.y]=1;
				}
				
			}
		}
	}
	cout << "false" <<endl;
}
int main () {
	freopen("pourwater.in","r",stdin);
	freopen("pourwater.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> a >> b >> c >> x;
	bfs();
	return 0;
}