快速切题 poj3414 Pots
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 10042 | Accepted: 4221 | Special Judge |
Description
You are given two pots, having the volume of A and B liters respectively. The following operations can be performed:
- FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap;
- DROP(i) empty the pot i to the drain;
- POUR(i,j) pour from pot i to pot j; after this operation either the pot j is full (and there may be some water left in the pot i), or the pot i is empty (and all its contents have been moved to the pot j).
Write a program to find the shortest possible sequence of these operations that will yield exactly C liters of water in one of the pots.
Input
On the first and only line are the numbers A, B, and C. These are all integers in the range from 1 to 100 and C≤max(A,B).
Output
The first line of the output must contain the length of the sequence of operations K. The following K lines must each describe one operation. If there are several sequences of minimal length, output any one of them. If the desired result can’t be achieved, the first and only line of the file must contain the word ‘impossible’.
Sample Input
- 3 5 4
Sample Output
- 6
- FILL(2)
- POUR(2,1)
- DROP(1)
- POUR(2,1)
- FILL(2)
- POUR(2,1)
- 应用时:10min
实际用时:57min
原因:六种操作都是不可逆转的.
思路:时间非常充裕到不需要建反边,数据太小
- #include <cstdio>
- #include <cstring>
- #include <queue>
- using namespace std;
- const int maxn=101;
- int n,m;
- typedef unsigned long long ull;
- int A,B,C;
- int vis[maxn][maxn];
- int ans[maxn][maxn][maxn*maxn];
- struct node{
- int a,b;
- node (int ta,int tb):a(ta),b(tb){}
- };
- void printop(int op){
- switch(op){
- case 0:
- puts("FILL(1)");
- break;
- case 1:
- puts("FILL(2)");
- break;
- case 2:
- puts("POUR(1,2)");
- break;
- case 3:
- puts("POUR(2,1)");
- break;
- case 4:
- puts("DROP(1)");
- break;
- case 5:
- puts("DROP(2)");
- break;
- }
- }
- void op(int &a,int &b,int op){
- switch(op){
- case 0:
- a=A;
- break;
- case 1:
- b=B;
- break;
- case 2:
- if(b+a<=B){
- b+=a;
- a=0;
- }
- else {
- a-=B-b;
- b=B;
- }
- break;
- case 3:
- if(b+a<=A){
- a+=b;
- b=0;
- }
- else {
- b-=A-a;
- a=A;
- }
- break;
- case 4:
- a=0;
- break;
- case 5:
- b=0;
- break;
- }
- }
- void bfs(){
- queue <node> que;
- que.push(node(0,0));
- vis[0][0]=0;
- while(!que.empty()){
- node tp=que.front();que.pop();
- int ta=tp.a;
- int tb=tp.b;
- if(tp.a==C||tp.b==C){
- printf("%d\n",vis[tp.a][tp.b]);
- for(int i=0;i<vis[ta][tb];i++){
- int op=ans[ta][tb][i];
- printop(op);
- }
- return ;
- }
- for(int i=0;i<6;i++){
- int ta=tp.a;
- int tb=tp.b;
- op(ta,tb,i);
- if(vis[ta][tb]==-1){
- vis[ta][tb]=vis[tp.a][tp.b]+1;
- for(int j=0;j<vis[tp.a][tp.b];j++){
- ans[ta][tb][j]=ans[tp.a][tp.b][j];
- }
- ans[ta][tb][vis[tp.a][tp.b]]=i;
- que.push(node(ta,tb));
- }
- }
- }
- puts("impossible");
- }
- int main(){
- scanf("%d%d%d",&A,&B,&C);
- memset(vis,-1,sizeof(vis));
- bfs();
- return 0;
- }
快速切题 poj3414 Pots的更多相关文章
- POJ3414—Pots(bfs加回溯)
http://poj.org/problem?id=3414 Pots Time Limit: 1000MS Memor ...
- POJ-3414 Pots (BFS)
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- poj3414 Pots (BFS)
Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12198 Accepted: 5147 Special J ...
- POJ3414 Pots —— BFS + 模拟
题目链接:http://poj.org/problem?id=3414 Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- POJ3414 Pots BFS搜素
题意:通过题目给出的三种操作,让任意一个杯子中的水到达一定量 分析:两个杯子最大容量是100,所以开个100*100的数组记录状态,最多1w个状态,所以复杂度很低,然后记录一下路径就好 注:代码写残了 ...
- POJ-3414.Pots.(BFS + 路径打印)
这道题做了很长时间,一开始上课的时候手写代码,所以想到了很多细节,但是创客手打代码的时候由于疏忽又未将pair赋初值,导致一直输出错误,以后自己写代码可以专心一点,可能会在宿舍图书馆或者Myhome, ...
- 快速切题sgu127. Telephone directory
127. Telephone directory time limit per test: 0.25 sec. memory limit per test: 4096 KB CIA has decid ...
- 快速切题sgu126. Boxes
126. Boxes time limit per test: 0.25 sec. memory limit per test: 4096 KB There are two boxes. There ...
- 快速切题 sgu123. The sum
123. The sum time limit per test: 0.25 sec. memory limit per test: 4096 KB The Fibonacci sequence of ...
随机推荐
- canvas绘图详解笔记之线条及线条属性
创建 canvas 首先创建一个canvas元素,我们只需要在html文件中加入这么一句代码: <canvas id="canvas">当前浏览器不支持canvas,请 ...
- Python3基础 函数 收集参数(tuple)+普通参数 的示例
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- bzero, memset ,setmem 区别【转】
本文转载自:http://chang6520.blog.163.com/blog/static/112665875201302843359715/ bzero 原型: extern void bzer ...
- arm linux下启动ftp服务
1.环境: /home/jello # uname -aLinux 3.10.0 #2 SMP Mon Mar 6 17:52:09 CST 2017 armv7l GNU/Linux 2.使用tc ...
- POJ2528 Mayor's posters(线段树&区间更新+离散化)题解
题意:给一个区间,表示这个区间贴了一张海报,后贴的会覆盖前面的,问最后能看到几张海报. 思路: 之前就不会离散化,先讲一下离散化:这里离散化的原理是:先把每个端点值都放到一个数组中并除重+排序,我们就 ...
- (转)Nuts and Bolts of Applying Deep Learning
Kevin Zakka's Blog About Nuts and Bolts of Applying Deep Learning Sep 26, 2016 This weekend was very ...
- 3D CNN for Video Processing
3D CNN for Video Processing Updated on 2018-08-06 19:53:57 本文主要是总结下当前流行的处理 Video 信息的深度神经网络的处理方法. 参考文 ...
- Future Works on P4
Future Works on P4 P4 and NV: MPvisor, Hyper4, HyperV, Flex4 P4 and NFV P4 and Network Cache P4 and ...
- Tex: The top-level auxiliary file: *.aux I couldn't open style file IEEEtran.bst 解决方法
参考: Bibliography is not printed using Kile on Ubuntu Tex: The top-level auxiliary file: *.aux I coul ...
- FAST:通过Floodlight控制器下发流表
参考: Floodlight+Mininet搭建OpenFlow(四):流表操作 通过Floodlight控制器下发流表 下发流表的方式有两种: 1.借助Floodlight的北向API,利用curl ...