描述

设有大小不等的三个无刻度的油桶,分别能盛满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. 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)

    1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')  # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...

  2. 塔式Server 服务器ESXI6.5安装

    参考文献: https://www.cnblogs.com/yufusec/p/9181422.html 第一步: esxi6.5.ios文件的下载 第二步: 通过UltraISO软件 制作启动盘或光 ...

  3. Spring boot 自定义starter

    以下配置来自尚硅谷.. 常用如何配置 @Configuration //指定这个类是一个配置类 @ConditionalOnXXX //在指定条件成立的情况下自动配置类生效 @AutoConfigur ...

  4. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)(转)

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  5. 模糊查询内存查询java实现

    下面说说看到的工作项目中的代码,是这个样子的,事先查询一次数据库,将查询到的整张表的数据存到内存,以后使用时不再查询数据库,而直接操作内存中的数据,这主要用于数据库中的数据比较稳定,不会轻易改变的情况 ...

  6. 钩子函数mounted:

    1.钩子函数 钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息.事件进行过滤,访问在正常情况下无法访问的消息.钩子的本质是一段用以处理系统消息的程序,通过 ...

  7. mac使用brew安装sshpass

    brew安装sshpass brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Form ...

  8. JAVAWEB 一一 userweb1(原生,非servlet版)

    创建数据库和表 首先,创建一个web项目 然后引入jar包 创建jsp页面 创建包 创建接口 实现类 详细内容 首先创建一个登陆页面 login.jsp <%@ page language=&q ...

  9. C# 图像处理: 获取当前活动窗口句柄,获取窗口大小及位置

    需调用API函数 需在开头引入命名空间 using System.Runtime.InteropServices; 获取当前窗口句柄:GetForegroundWindow() [DllImport( ...

  10. C# 反射获取所有视图

    原地址:忘了 controller 的 action 加上属性 [System.ComponentModel.Description("菜单列表")]  且  返回值为 Syste ...