比赛 |
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;
}