比赛 |
2025暑期集训第7场 |
评测结果 |
AAAAAAAAAA |
题目名称 |
倒水 |
最终得分 |
100 |
用户昵称 |
pcx |
运行时间 |
0.030 s |
代码语言 |
C++ |
内存使用 |
3.77 MiB |
提交时间 |
2025-08-11 17:23:23 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
struct Node{
int a,b,c,s;
Node(int _a,int _b,int _c,int _s):a(_a),b(_b),c(_c),s(_s){};
};
queue<Node> q;
int a,b,c,x;
bool vis[111][111][111];
void f(int a,int b,int c,int s){
if(!vis[a][b][c]){
vis[a][b][c]++;
q.push(Node(a,b,c,s));
}
}
bool bfs(int a,int b,int c,int x){
q.push(Node(a,0,0,0));
vis[a][0][0]=1;
while(!q.empty()){
Node s=q.front();
q.pop();
if(s.a==x||s.b==x||s.c==x){
cout<<s.s<<endl;
return 1;
}
int p=min(s.a,b-s.b);
if(p>0) f(s.a-p,s.b+p,s.c,s.s+1);
p=min(s.b,c-s.c);
if(p>0) f(s.a,s.b-p,s.c+p,s.s+1);
p=min(s.a,c-s.c);
if(p>0) f(s.a-p,s.b,s.c+p,s.s+1);
p=min(s.c,b-s.b);
if(p>0) f(s.a,s.b+p,s.c-p,s.s+1);
p=min(s.c,a-s.a);
if(p>0) f(s.a+p,s.b,s.c-p,s.s+1);
p=min(s.b,a-s.a);
if(p>0) f(s.a+p,s.b-p,s.c,s.s+1);
}
return 0;
}
int main(){
freopen("pourwater.in","r",stdin);
freopen("pourwater.out","w",stdout);
cin>>a>>b>>c>>x;
if(!bfs(a,b,c,x)){
cout<<"false";
}
return 0;
}