三个水杯
来源:互联网 发布:淘宝网男羽绒服中长款 编辑:程序博客网 时间:2024/04/25 16:25
- 输入
- 第一行一个整数N(0<N<50)表示N组测试数据
接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3>0)表示三个水杯的体积。
第二行给出三个整数E1 E2 E3 (体积小于等于相应水杯体积)表示我们需要的最终状态 - 输出
- 每行输出相应测试数据最少的倒水次数。如果达不到目标状态输出-1
- 样例输入
26 3 14 1 19 3 27 1 1
- 样例输出
3-1
//标程:
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;struct ss{ int a[3]; int step;};int s[4], e[4];bool vis[101][101][101];bool judge_target(ss tmp){ if(tmp.a[0] == e[0] && tmp.a[1] == e[1] && tmp.a[2] == e[2]) return true; return false;}void f(int k, int i, ss &tmp){ int x = s[k] - tmp.a[k]; if(tmp.a[i] >= x) { tmp.a[k] += x; tmp.a[i] -= x; } else { tmp.a[k] += tmp.a[i]; tmp.a[i] = 0; }}int bfs(){ queue<ss> q; memset(vis,0,sizeof(vis)); ss start; start.a[0] = s[0], start.a[1] = start.a[2] = 0; start.step = 0; q.push(start); vis[start.a[0]][0][0] = true; while(!q.empty()) { ss tmp = q.front(); q.pop(); if(judge_target(tmp)) return tmp.step; for(int i = 0; i < 3; ++ i) { for(int j = 1; j < 3; ++ j) { int k = (i + j) % 3; if(tmp.a[i] != 0 && tmp.a[k] < s[k]) { ss new_tmp = tmp; f(k,i,new_tmp); new_tmp.step = tmp.step + 1; if(!vis[new_tmp.a[0]][new_tmp.a[1]][new_tmp.a[2]]) { vis[new_tmp.a[0]][new_tmp.a[1]][new_tmp.a[2]] = true; q.push(new_tmp); } } } } } return -1;}int main(){// freopen("a.txt","r",stdin); int t; cin >> t; while(t --) { cin >> s[0] >> s[1] >> s[2]; cin >> e[0] >> e[1] >> e[2]; cout << bfs() << endl; } return 0;}
0 0
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯问题
- NYOJ21 三个水杯
- poj1011
- 在百度工作的前辈的经验
- 多校第一场Couple doubi
- 百度员工离职总结:如何做个好员工
- hdu 1094 a+b问题6 多组数每组n个n在前 20140722
- 三个水杯
- 关于SurfaceView的问题
- 简单除法(简单枚举优化)
- 素数问题(输出100以内所有素数)
- 电子设计省赛--双ADC功率因数
- 树状dp--B
- qt部署到android设备,很久没响应解决办法
- BCG安装与使用
- hdu1272_小希的迷宫