描述

设有大小不等的三个无刻度的油桶,分别能盛满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. day05-if-else语句

    1.Python条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块.Python程序语言指定任何非0和非空(null)值为true,0 或者 nu ...

  2. java字符串常量池——字符串==比较的一个误区

    转自:https://blog.csdn.net/wxz980927155/article/details/81712342   起因 再一次js的json对象的比较中,发现相同内容的json对象使用 ...

  3. 卸载数据盘、更改Inodes

    更改inodes  会格式化数据库,记得先备份 1.fuser -m -v /dev/vdb查看哪些进程正在占用数据库 2.然后kill 掉进程 3.umount /data1/ 4.mkfs.ext ...

  4. 剑指OFFER例题——从尾到头打印链表

    /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val ...

  5. qurtz.net(转载)

    Quartz+TopShelf实现Windows服务作业调度   Quartz:首先我贴出来了两段代码(下方),可以看出,首先会根据配置文件(quartz.config),包装出一个Quartz.Co ...

  6. Windows命令行打开常用界面

    本文主要介绍Windows下命令行操作打开常用界面,使用方法为在DOS命令行下输入相关命令.可以减少多次操作界面.可以尝试在命令行执行下面提到的命令感受下,快捷键主要内容包括: 1.查看计算机的基本信 ...

  7. 检查浏览器是否已经启用Java支持功能

    <script type="text/javascript"> document.write("navigator对象的方法"+"< ...

  8. winform,listbox设置行高

    //必须要在写这个事件里写才有效果 private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemH ...

  9. MySQL 数据 导入到 SQL Service

    1.下载安装ODBC驱动程序 地址:http://dev.mysql.com/downloads/connector/odbc/ 注意:系统的版本问题( 我的是64位的win7系统,但是SQL Ser ...

  10. CentOS下mysql数据库常用命令

    1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆mysql服务器 mysql -uroot -p -h192.168.137.10 ...