codevs1226 倒水问题
题目描述 Description
有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒。已知 x 升壶为空 壶, y 升壶为空壶。问如何通过倒水或灌水操作, 用最少步数能在x或y升的壶中量出 z ( z ≤ 100 )升的水 来。
一行,三个数据,分别表示 x,y 和 z;
一行,输出最小步数 ,如果无法达到目标,则输出"impossible"
3 22 1
14
思路:
普通广搜
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define maxn 100000
using namespace std;
struct sta{
int x;
int y;
int step;
int frm;
};
int mx,my,z,j[][],solved = ;
sta temp;
void input(){
cin>>mx>>my>>z;
temp.x = temp.y = temp.step = ;
temp.frm = -;
}
sta expand(sta a,int sign){
if(sign == ) a.x = ;
if(sign == ) a.y = ;
if(sign == ) a.x = mx;
if(sign == ) a.y = my;
if(sign == ){
int d;
if(mx - a.x < a.y) d = mx - a.x;
else d = a.y;
a.y -= d;
a.x += d;
}
if(sign == ){
int d;
if(my - a.y < a.x) d = my - a.y;
else d = a.x;
a.y += d;
a.x -= d;
}
a.frm = sign;
a.step++;
if(j[a.x][a.y]) a.step = -;
j[a.x][a.y] = ;
return a;
}
void bfs(){
sta q[maxn];
int h = ,t = ;
q[h] = temp;
while(h != t){
if(q[h%maxn].x == z || q[h%maxn].y == z) {
cout<<q[h%maxn].step<<endl;
solved = ;
break;
}
for(int i = ;i <= ;i++){
if(i == && (q[h%maxn].x == ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].y == ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].x == mx ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].y == my ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].y <= || q[h%maxn].x >= mx || q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].x <= || q[h%maxn].y >= my || q[h%maxn].frm == )) continue;
temp = expand(q[h%maxn],i); if(temp.step != -) {
t++;
q[t%maxn] = temp; }
}
h++;
}
}
int main(){
input();
if(z > mx || z > my || !mx || !my || (mx == my && mx != z)){
cout<<"impossible"<<endl;
return ;
}
bfs();
if(!solved) cout<<"impossible"<<endl;
return ;
}
codevs1226 倒水问题的更多相关文章
- codevs1226倒水问题(Bfs)
/* 首先建立模型 可以看成是三个水杯 第三个无穷大 (这里看成是201足够了) 最少步数 想到Bfs 维护队列里的状态:要有个步数 还要有v :此时刻三个杯子有多少水 然后倒水:因为没有刻度 所以有 ...
- 广度优先搜索 cdoevs 1226 倒水问题
cdoevs 1226 倒水问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...
- 倒水问题 (codevs 1226) 题解
[问题描述] 有两个无刻度标志的水壶,分别可装x升和y升 ( x,y 为整数且均不大于100)的水.设另有一水缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知x升壶为空壶, ...
- POJ 3414 Pots【bfs模拟倒水问题】
链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...
- yzoi1777倒水问题的详细解法
Description - 问题描述 x.y.z三个容器,其最大容量分别是xMAX升.yMAX升.zMAX升,这里规定100>xMAX>yMAX>zMAX.一开始x是装满了水的,现在 ...
- 倒水问题-->经典面试题目
题目详细: 有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水.我们还有一个足够大的水缸,足够容纳C升水.起初它是空的,我们只能往水缸里倒入水,而不能倒出.可以进行的操作是:把一个容器灌满 ...
- 倒水问题 (FillUVa 10603) 隐式图
题意:本题的题意是给你三个杯子,第一二个杯子是空的,第三个杯子装满水,要求是量出一定容量d升的水.若是得不到d升的水,那就让某一个杯子里面的水达到d',使得d'尽量接近d升. 解题思路:本题是给出初始 ...
- uva10603 倒水问题
状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...
- 美团codeM预赛A轮 倒水
[编程题] 倒水 时间限制:1秒 空间限制:32768K 有一个大水缸,里面水的温度为T单位,体积为C升.另有n杯水(假设每个杯子的容量是无限的),每杯水的温度为t[i]单位,体积为c[i]升. 现在 ...
随机推荐
- 倒计时,短信发送后倒计时效果js
<div class="input-group-addon"><a style="width: 100%;height: 100%" href ...
- windows 定时任务 设置 安全事项
windows 定时任务 设置 安全事项 1.如果是oaadmin/administrator 创建oracle 数据库. 安全选项如下: 1.只是在用户登录时候运行. sample: data ho ...
- scala-基础-映射(1)
//映射(1)-构建,获取,更新,迭代,反转,映射(可变与不可变 互换) class Demo1 extends TestCase { //构建与获取 def test_create_^^(){ // ...
- PHP语言开发Paypal支付demo的具体实现
如果我们的应用是面向国际的.那么支付的时候通常会考虑使用paypal.以下为个人写的一个paypal支付示例,已亲测可行.paypal有个很不错的地方就是为开发者提供了sandbox(沙箱)测试功能. ...
- [ SPOJ RESTACK ] Restacking haybales
\(\\\) Description 给出一个环,每个位置有一个初值 \(A_i\),有一个目标值 \(B_i\),保证 \(\sum A_i=\sum B_i\) 每个位置只能把值分给隔壁的,每次分 ...
- 2057. [ZLXOI2015]殉国
★☆ 输入文件:BlackHawk.in 输出文件:BlackHawk.out 评测插件 时间限制:0.05 s 内存限制:256 MB [题目描述] 正义的萌军瞄准了位于南极洲的心灵 ...
- 仿ofo单车做一个轮播效果
github地址 首先我是利用swiper.js做的,因为这个很强大,哈哈~~,上代码 html很简单 <body> <div class="swiper-containe ...
- (转)金蝶KIS迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系”
金蝶KIS迷你版.标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系” 2013-07-10 12:17:51| 分类: 金蝶专题|举报|字号 订阅 金 ...
- Shell基础笔记一
由于工作需要,开始学习Shell编程,都是一些简单的基础知识,现整理收集分享出来,希望对大家有帮助 -------------------------------------------------- ...
- python logger日志
直接上代码 import logging import logging.handlers import datetime import time import threading from conf. ...