A - Jugs ZOJ - 1005 (模拟)
题目链接:https://cn.vjudge.net/contest/281037#problem/A
题目大意:给你a,b,n。a代表第一个杯子的容量,b代表第二个杯子的容量,然后一共有6种操作。让你用尽可能少的步骤将第二个杯子的当前的水的体积转换成n。
具体思路:就是队列模拟啊,,,,打比赛的时候脑子瓦特了,没读完题目就开始读了,,,这个毛病确实得改了,,
AC代码:
#include<iostream>
#include<stack>
#include<iomanip>
#include<cmath>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
# define ll long long
const int maxn = 2e6+;
int head[maxn];
struct node
{
int op;
int a;
int b;
} q[maxn];
int ans[maxn],flag=;
int vis[+][+];
void print(int t)
{
if(t>)
{
print(head[t]);
ans[++flag]=q[t].op;
}
}
void cal(int t1,int t2,int g)
{
head[]=-;
int l=,r=,tt;
int num=;
q[].a=,q[].b=,q[].op=;
vis[][]=;
while(l<=r)
{
int tmp=l;
vis[q[tmp].a][q[tmp].b]=;
l++;
if(vis[t1][q[tmp].b]==){
head[++r]=tmp;
q[r].a=t1;
q[r].b=q[tmp].b;
q[r].op=;
if(q[r].b==g)
{
print(r);
return ;
}
}
if(vis[q[tmp].a][t2]==)
{
head[++r]
=tmp;
q[r].a=q[tmp].a;
q[r].b=t2;
q[r].op=;
if(q[r].b==g)
{
print(r);
return ;
}
}
if(vis[][q[tmp].b]==)
{
head[++r]
=tmp;
q[r].a=;
q[r].b=q[tmp].b;
q[r].op=;
if(q[r].b==g)
{
print(r);
return ;
}
}
if(vis[q[tmp].a][]==)
{
head[++r]
=tmp;
q[r].a=q[tmp].a;
q[r].b=;
q[r].op=;
if(q[r].b==g)
{
print(r);
return ;
}
}
int s1=q[tmp].a-min(q[tmp].a,t2-q[tmp].b);
int s2=q[tmp].b+q[tmp].a-s1;
if(vis[s1][s2]==)
{
head[++r]
=tmp;
q[r].a=s1;
q[r].b=s2;
q[r].op=;
if(q[r].b==g)
{
print(r);
return ;
}
}
s1=q[tmp].b-min(q[tmp].b,t1-q[tmp].a);
s2=q[tmp].a+q[tmp].b-s1;
if(vis[s1][s2]==)
{
head[++r]
=tmp;
tt=q[tmp].b;
q[r].b=s1;
q[r].a=s2;
q[r].op=;
if(q[r].b==g)
{
print(r);
return ;
}
}
}
}
int main()
{
int t1,t2,n;
while(~scanf("%d %d %d",&t1,&t2,&n))
{
memset(vis,,sizeof(vis));
flag=;
cal(t1,t2,n);
for(int i=; i<=flag; i++)
{
if(ans[i]==)
{
printf("fill A\n");
}
else if(ans[i]==)
{
printf("fill B\n");
}
else if(ans[i]==)
{
printf("empty A\n");
}
else if(ans[i]==)
{
printf("empty B\n");
}
else if(ans[i]==)
{
printf("pour A B\n");
}
else if(ans[i]==)
{
printf("pour B A\n");
}
}
printf("success\n");
}
// }
return ;
}
A - Jugs ZOJ - 1005 (模拟)的更多相关文章
- ZOJ 1005 Jugs(BFS)
Jugs In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were confronted with th ...
- ZOJ 1005:Jugs(思维)
Jugs Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge In the movie "Die Har ...
- ZOJ 1005 Jugs
原题链接 题目大意:有一大一小两个杯子,相互倒水,直到其中一个杯子里剩下特定体积的水.描述这个过程. 解法:因为两个杯子的容积互质,所以只要用小杯子不断往大杯子倒水,大杯子灌满后就清空,大杯子里迟早会 ...
- [ZOJ 1005] Jugs (dfs倒水问题)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5 题目大意:给你6种操作,3个数a,b,n,代表我有两个杯子,第一个杯 ...
- zoj 3627#模拟#枚举
Treasure Hunt II Time Limit: 2 Seconds Memory Limit: 65536 KB ...
- ZOJ 3829 模拟贪心
2014牡丹江现场赛水题 给出波兰式,推断其是否合法.假设不合法有两种操作: 1:任何位置加一个数字或者操作符 2:随意两个位置的元素对调 贪心模拟就可以 先推断数字数是否大于操作符数,若不大于 an ...
- ZOJ 3736 模拟魔方
题意: 2*2*2的魔方,给你一个初始状态,和一个限定步数,问你在这么多步数条件下最多能有多少面拼好,(不是累加关系,是某一个状态的最多,最多是6); 思路: 最多是7步,所以直 ...
- ZOJ 3492 模拟循环链表线性查找
WA了好几次最后找到错因是因为数组开小了! = = string whose length never exceeds 20 所以至少要开到21 = = ,我却一直开20 ╮(╯▽╰)╭ AC代码: ...
- AC题目简解-数据结构
A - Japan POJ 3067 要两条路有交叉,(x1,y1)(x2,y2)那么需要满足:(x1-x2)*(y1-y2)<0判断出这是求逆序的问题 树状数组求逆序,先通过自定义的比较器实 ...
随机推荐
- Daily Scrum NO.2
工作概况 符美潇(PM) 昨日完成的工作 1.Daily Scrum.日常会议及日常工作的分配和查收. 2.为两名团队新成员制定了任务并录入TFS. 今日工作 1.Daily Scrum.日常会议及日 ...
- @PathVariable获取带点参数,获取不全
{account:.+}在{account}后加上:.+ 可参考原博:http://blog.csdn.net/jrainbow/article/details/46126179
- 专业实训题目需求分析(3D推箱子)
业务需求: 游戏提供主菜单让玩家进行游戏设置.帮助说明,推箱子的小人可以前后左右转动,箱子可以被上下左右的推动,要有关卡设置,障碍物设置,游戏提供背景音乐的功能,要实现3D效果. 面向的用户类型 ...
- 四则运算app总结
程序有难度和单项练习,但设计了每次只出5到题,如果做错的话会把错题加入到数据库中,然后通多错题巩固选项可以对错题进行训练. 代码: 普通选项代码: package com.example.szys; ...
- 初学Hadoop之单机模式环境搭建
本文仅作为学习笔记,供大家初学Hadoop时学习参考.初学Hadoop,欢迎有经验的朋友进行指导与交流! 1.安装CentOS7 准备 CentOS系统镜像CentOS-7.0-1406-x86_64 ...
- ThreadLocal 与 Synchronized区别
相同:ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题.不同:Synchronized同步机制采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问:而Thr ...
- Windows server 自带的 .net版本
1. Win2012r2 所带的版本: 2. Win2016 所带的版本 4.6 Win2019 自带的 .net版本为: 4.7 4. 然后比较 Win2008r2sp1 使用的是 .net3.5 ...
- [转帖]Portainer -- Docker可视化管理工具的安装配置及使用
原贴地址:https://blog.csdn.net/A632189007/article/details/78779920 Portainer介绍 Portainer是Docker的图形化管理工具, ...
- c语言和c++有什么区别
差不多是win98跟winXP的关系.C++是在C的基础上增加了新的理论,玩出了新的花样.所以叫C加加. C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输 ...
- 洛谷U19464 山村游历(Wander)(LCT)
洛谷题目传送门 LCT维护子树信息常见套路详见我的总结 闲话 题目摘自WC模拟试题(by Philipsweng),原题目名Wander,"山村游历"是自己搞出来的中文名. 数据自 ...