TOJ 2778 数据结构练习题――分油问题(广搜和哈希)
描述
设有大小不等的三个无刻度的油桶,分别能盛满x,y,z公升油。初始时,第一个油桶盛满油,第二、三个油桶为空,在某一个油桶上分出targ公升油。
输入
输入包含多组测试数据。每组数据包含一行。分别x,y,z,targ四个整数,x,y,z,targ都大于 等于0,且小于32767。
输出
对应每组输出YES或者NO。如果可以分出targ公升油就输出YES,否则就输出NO。
样例输入
80 50 30 40
样例输出
YES
提示
#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 数据结构练习题――分油问题(广搜和哈希)的更多相关文章
- TOJ 1214: 数据结构练习题――线性表操作
描述 请你定义一个线性表,可以对表进行"在某个位置之前插入一个元素"."删除某个位置的元素"."清除所有元素"."获取某个位置的元 ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 队列&广搜
搜索里有深搜,又有广搜,而广搜的基础就是队列. 队列是一种特殊的线性表,只能在一段插入,另一端输出.输出的那一端叫做队头,输入的那一端叫队尾.是一种先进先出(FIFO)的数据结构. 正经的队列: 头文 ...
- E. New Reform_贪心,深搜,广搜。
E. New Reform time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
- 【UOJ#228】基础数据结构练习题 线段树
#228. 基础数据结构练习题 题目链接:http://uoj.ac/problem/228 Solution 这题由于有区间+操作,所以和花神还是不一样的. 花神那道题,我们可以考虑每个数最多开根几 ...
- HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5652(二分+广搜)
题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...
- nyoj 613 免费馅饼 广搜
免费馅饼 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...
随机推荐
- 上下两个div, 一个固定高度, 另一个铺满屏幕
<div class="box"> <div class="el1"></div> <div class=" ...
- Linux:服务器/客户端API调用错误检查
昨天和今天上午,我分别实现简单的服务器和客户端,运行之后表示没问题,一切正常.但是这还是有问题的,最大的一个就是没有错误检查.现在我们来加上错误检查: 服务器的代码: #include <std ...
- 编译安装php5 解决编译安装的php加载不了gd
1. 编译安装php需要的模块: yum install libxml2-devel libxml2 curl curl-devel libpng-devel libpng openssl o ...
- java学习大方向
总结Java程序员成长之路 转载 http://bbs.javazhijia.com/topic/1bb0733f80d94aedb50cc3b66d9792b6.html 我也搞了几年JAVA ...
- ReactiveX 学习笔记(5)合并数据流
Combining Observables 本文的主题为合并 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(四)Combining An ...
- RabbitMQ系列教程之五:主题(Topic)(转载)
RabbitMQ系列教程之五:主题(Topic) (本实例都是使用的Net的客户端,使用C#编写),说明,中文方括号[]表示名词. 在上一个教程中,我们改进了我们的日志记录系统. 没有使用只能够进行虚 ...
- 【360】pandas.DataFrame、array、list 之间转换
pandas.DataFrame → array → list values 可以转成 array array.tolist() 可以转成 list >>> c 0 1 2 0 0 ...
- vmware搭建lnmp环境配置域名
找到nginx配置文件,修改server_name 然后找到/etc/hosts文件 修改成如下 之后在Windows本地的C盘的hosts文件中添加解析 好了,这样就可以访问了 通往牛逼的路上,在意 ...
- ubuntu 下安装和启动SSH 服务
安装OPENSSH 服务端 sudo apt-get install openssh-server 查看进程是否启动 ps -e | grep ssh 删除密钥文件 rm /etc/ssh/ssh_h ...
- 获取tensorflow中tensor的值
tensorflow中的tensor值的获取: import tensorflow as tf #定义变量a a=tf.Variable([[[1,2,3],[4,5,6]],[[7,8,9],[10 ...