记录编号 |
604825 |
评测结果 |
AAAAAAAAAA |
题目名称 |
3659.[SYOI 2022]倒水 |
最终得分 |
100 |
用户昵称 |
Hollow07 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.029 s |
提交时间 |
2025-08-12 08:23:17 |
内存使用 |
3.89 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
struct node{
int a,b,c,step;
};
int A,B,C,x;
bool vis[101][101][101];
queue<node> q;
bool check(int aa,int bb,int cc){
return (aa==x)||(bb==x)||(cc==x);
}
int main(){
// freopen("in.in","r",stdin);
freopen("pourwater.in","r",stdin);
freopen("pourwater.out","w",stdout);
scanf("%d %d %d %d",&A,&B,&C,&x);
if(x>A){
printf("false\n");
return 0;
}
q.push({A,0,0,0});
vis[A][0][0]=1;
while(!q.empty()){
node u=q.front();q.pop();
int a=u.a,b=u.b,c=u.c,step=u.step;
if(check(a,b,c)){
printf("%d\n",step);
return 0;
}
if(a>0&&b<B){
int v=min(a,B-b);
int na=a-v,nb=b+v,nc=c;
if(!vis[na][nb][nc]){
vis[na][nb][nc]=1;
q.push({na,nb,nc,step+1});
}
}
if(a>0&&c<C){
int v=min(a,C-c);
int na=a-v,nb=b,nc=c+v;
if(!vis[na][nb][nc]){
vis[na][nb][nc]=1;
q.push({na,nb,nc,step+1});
}
}
if(b>0&&a<A){
int v=min(b,A-a);
int na=a+v,nb=b-v,nc=c;
if(!vis[na][nb][nc]){
vis[na][nb][nc]=1;
q.push({na,nb,nc,step+1});
}
}
if(b>0&&c<C){
int v=min(b,C-c);
int na=a,nb=b-v,nc=c+v;
if(!vis[na][nb][nc]){
vis[na][nb][nc]=1;
q.push({na,nb,nc,step+1});
}
}
if(c>0&&a<A){
int v=min(c,A-a);
int na=a+v,nb=b,nc=c-v;
if(!vis[na][nb][nc]){
vis[na][nb][nc]=1;
q.push({na,nb,nc,step+1});
}
}
if(c>0&&b<B){
int v=min(c,B-b);
int na=a,nb=b+v,nc=c-v;
if(!vis[na][nb][nc]) {
vis[na][nb][nc]=1;
q.push({na,nb,nc,step+1});
}
}
}
cout << "false\n";
return 0;
}