描述

设有大小不等的三个无刻度的油桶,分别能盛满x,y,z公升油。初始时,第一个油桶盛满油,第二、三个油桶为空,在某一个油桶上分出targ公升油。

输入

输入包含多组测试数据。每组数据包含一行。分别x,y,z,targ四个整数,x,y,z,targ都大于 等于0,且小于32767。

输出

对应每组输出YES或者NO。如果可以分出targ公升油就输出YES,否则就输出NO。

样例输入

80 50 30 40

样例输出

YES

提示

使用队列。分油过程中,由于油桶上没有刻度,只能将油桶倒满或者倒空。三个油桶盛油的总量始终等于初始时第一个油桶盛满的油量。
题意
给你3个油桶,初始化第一个装满,第二个第三个为空,求能否有一个桶为targ升油,不能有丢弃
题解
一开始没读懂题意,傻逼了半天,题目读懂后就很easy了
这里用广搜搜索所有情况就行了,很暴力很无脑
这里由于X,Y,Z有点大,存状态开三维数组爆内存,这里用了map中的哈希思想
代码
 #include<bits/stdc++.h>
using namespace std;
struct Node
{
int x,y,z;
Node(int x,int y,int z):x(x),y(y),z(z){}
};
string To_string(int x,int y,int z)
{
stringstream ss;
ss<<x;ss<<y;ss<<z;
return ss.str();
}
int main()
{
int x,y,z,targ;
while(scanf("%d%d%d%d",&x,&y,&z,&targ)!=EOF)
{
int flag=;
queue<Node> q;
map<string,int> ma;
q.push(Node(x,,));
while(!q.empty())
{
Node h=q.front();q.pop();
if(h.x==targ||h.y==targ||h.z==targ){flag=;break;}//成功
if(ma[To_string(h.x,h.y,h.z)])continue;//状态有过,跳过
ma[To_string(h.x,h.y,h.z)]=;//标记 if(h.x+h.y<=y)q.push(Node(,h.x+h.y,h.z));//x->y不会溢出,全倒过去
else q.push(Node(h.x-y+h.y,y,h.z));//x->y会溢出,y倒满 if(h.x+h.z<=z)q.push(Node(,h.y,h.x+h.z));//x->z
else q.push(Node(h.x-z+h.z,y,z)); if(h.x+h.y<=x)q.push(Node(h.x+h.y,,h.z));//y->x
else q.push(Node(x,h.y-x+h.x,h.z)); if(h.y+h.z<=z)q.push(Node(h.x,,h.y+h.z));//y->z
else q.push(Node(h.x,h.y-z+h.z,z)); if(h.x+h.z<=x)q.push(Node(h.x+h.z,h.y,));//z->x
else q.push(Node(x,h.y,h.z-x+h.x)); if(h.y+h.z<=y)q.push(Node(x,h.y+h.z,));//z->y
else q.push(Node(h.x,y,h.z-y+h.y));
}
printf("%s\n",flag?"YES":"NO");
}
return ;
}

TOJ 2778 数据结构练习题――分油问题(广搜和哈希)的更多相关文章

  1. TOJ 1214: 数据结构练习题――线性表操作

    描述 请你定义一个线性表,可以对表进行"在某个位置之前插入一个元素"."删除某个位置的元素"."清除所有元素"."获取某个位置的元 ...

  2. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  3. 队列&广搜

    搜索里有深搜,又有广搜,而广搜的基础就是队列. 队列是一种特殊的线性表,只能在一段插入,另一端输出.输出的那一端叫做队头,输入的那一端叫队尾.是一种先进先出(FIFO)的数据结构. 正经的队列: 头文 ...

  4. E. New Reform_贪心,深搜,广搜。

    E. New Reform time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

  6. 【UOJ#228】基础数据结构练习题 线段树

    #228. 基础数据结构练习题 题目链接:http://uoj.ac/problem/228 Solution 这题由于有区间+操作,所以和花神还是不一样的. 花神那道题,我们可以考虑每个数最多开根几 ...

  7. HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?

    这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others)  ...

  8. HDU 5652(二分+广搜)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...

  9. nyoj 613 免费馅饼 广搜

    免费馅饼 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...

随机推荐

  1. Activity工作流学习(二)--Activity数据库

    23张表 ACT_RE_资源库流程规划表 act_re_deployment 部署信息表 act_re_model 流程设计模型部署表 act_re_procdef 流程定义数据表 ACT_RU_运行 ...

  2. WPF中TextBox文件拖放问题

    在WPF中,当我们尝试向TextBox中拖放文件,从而获取其路径时,往往无法成功(拖放文字可以成功).造成这种原因关键是WPF的TextBox对拖放事件处理机制的不同,具体可参考这篇文章Textbox ...

  3. jsfl 导出指定名称的swf

    var _openDOC = fl.openDocument("file:///E|TE/dt.fla"); var _exName = _openDOC.pathURI.spli ...

  4. jsfl 生成flash 工具面板

    利用flash组件的List做界面,先从flash中拖出List组件,然后删除.绑定Main类. package { import flash.display.Sprite; import flash ...

  5. UICollectionView自定义cell布局layout

    写一个类继承UICollectionViewLayout,这个类需要提供一个数组来标识各个cell的属性信息,包括位置,size大小,返回一个UICollectionViewLayoutAttribu ...

  6. redis 学习笔记2(集群之哨兵模式的使用)

    redis3.0之前已经有了哨兵模式,3.0之后有了cluster(分片集群),官方不推荐使用!!主要原因是分片后单节点故障后需要实现手动分槽... 集群较为成熟的解决方案codis,公司使用的是哨兵 ...

  7. Win2012&Win2008双系统启动菜单设置

    电脑最初安装的是XP,后来想升级操作系统,但XP里又有很多常用软件不想重装,于是装了一个Win2008 R2的双系统,安装好2008R2后,系统自动产生一个2008R2的启动菜单,可以选择进入2008 ...

  8. Sql中EXISTS与IN的使用及效率

    in 和exists 对于以上两种查询条件,in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询. 一直以来认为exists 比in 效率高 ...

  9. ScrollReveal.js 用于创建和管理元素进入可视区域时的动画效果,帮助你的网站增加吸引力。

    ScrollReveal.js 用于创建和管理元素进入可视区域时的动画效果,帮助你的网站增加吸引力. 1.http://www.yangqq.com/jstt/css3/2017-08-08/787. ...

  10. https://www.oschina.net/project/zhlist/326/scripting 开源

    1https://www.oschina.net/project/zhlist/326/scripting