当前位置:网站首页>POJ 3414 pots (bfs+ clues)
POJ 3414 pots (bfs+ clues)
2022-07-05 20:52:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack , I've prepared for you today Idea Registration code .
Pots
Time Limit: 1000MS | Memory Limit: 65536K | |||
---|---|---|---|---|
Total Submissions: 10071 | Accepted: 4237 | 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)
Ideas : We all have 6 Kind of operation : hold A The water is poured out , hold A Fill it up with , hold B Pour the water in A in .B and A similar .
The maximum volume of the tank is 100, Set a constant N=100, Open a two-dimensional array to record the value of state change .
1、 From the tap to A Add water in t, Record -t,
2、 From the tap to B Add water in t, Record -t-N,
3、 from B Inside A Add water t, Record t
4、 from A Inside B Add water t. Record N+t
5、 hold A Pour out the water , Record 2*N+t,(A Original water t)
6、 hold B Pour out the water , Record 3*N+t,(B Original water t)
#include<stdio.h>
#include<queue>
#include<map>
#include<string>
#include<string.h>
using namespace std;
#define N 105
const int inf=0x1f1f1f1f;
int a,b,c,flag;
int mark[N][N];
struct node
{
int x,y,t;
friend bool operator<(node a,node b)
{
return a.t>b.t;
}
};
void prif(int x,int y) // Recursive output path
{
if(x==0&&y==0)
return ;
if(mark[x][y]>3*N)
{
prif(x,mark[x][y]-3*N);
printf("DROP(2)\n");
}
else if(mark[x][y]>2*N)
{
prif(mark[x][y]-2*N,y);
printf("DROP(1)\n");
}
else if(mark[x][y]>N)
{
int tmp=mark[x][y]-N;
prif(x+tmp,y-tmp);
printf("POUR(1,2)\n");
}
else if(mark[x][y]>0)
{
int tmp=mark[x][y];
prif(x-tmp,y+tmp);
printf("POUR(2,1)\n");
}
else if(mark[x][y]>-N)
{
int tmp=-mark[x][y];
prif(x-tmp,y);
printf("FILL(1)\n");
}
else if(mark[x][y]<-N)
{
int tmp=N+mark[x][y];
prif(x,y+tmp);
printf("FILL(2)\n");
}
}
void bfs()
{
priority_queue<node>q;
node cur,next;
mark[0][0]=inf; // This state can only appear once . The assignment is inf Prevent interference with other values
mark[a][0]=-a;
mark[0][b]=-b-N;
cur.t=1;
cur.x=a;
cur.y=0;
q.push(cur);
cur.x=0;
cur.y=b;
q.push(cur);
while(!q.empty())
{
cur=q.top();
q.pop();
next.t=cur.t+1;
if(cur.x==c||cur.y==c)
{
flag=1;
printf("%d\n",cur.t);
prif(cur.x,cur.y);
return ;
}
if(cur.x<a) // towards A Add water
{
int tmp=a-cur.x;
next.y=cur.y;
next.x=a; // Water from the tap
if(!mark[next.x][next.y])
{
mark[next.x][next.y]=-tmp;
q.push(next);
}
if(cur.y>0) // come from B Of water
{
int tmp=min(cur.y,a-cur.x);
next.x=cur.x+tmp;
next.y=cur.y-tmp;
if(!mark[next.x][next.y])
{
mark[next.x][next.y]=tmp;
q.push(next);
}
}
}
if(cur.y<b) // towards B Add water
{
int tmp=b-cur.y;
next.x=cur.x;
next.y=b; // Water from the tap
if(!mark[next.x][next.y])
{
mark[next.x][next.y]=-tmp-N;
q.push(next);
}
if(cur.x>0) // come from A Of water
{
int tmp=min(cur.x,b-cur.y);
next.y=cur.y+tmp;
next.x=cur.x-tmp;
if(!mark[next.x][next.y])
{
mark[next.x][next.y]=tmp+N;
q.push(next);
}
}
}
if(cur.x>0) // Pour out the water
{
int tmp=cur.x;
next.x=0;
next.y=cur.y;
if(!mark[next.x][next.y])
{
mark[next.x][next.y]=2*N+tmp;
q.push(next);
}
}
if(cur.y>0)
{
int tmp=cur.y;
next.y=0;
next.x=cur.x;
if(!mark[next.x][next.y])
{
mark[next.x][next.y]=3*N+tmp;
q.push(next);
}
}
}
}
int main()
{
while(scanf("%d%d%d",&a,&b,&c)!=-1)
{
memset(mark,0,sizeof(mark));
flag=0;
bfs();
if(!flag)
printf("impossible\n");
}
return 0;
}
Copyright notice : This article is an original blog article , Blog , Without consent , Shall not be reproduced .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/117660.html Link to the original text :https://javaforall.cn
边栏推荐
- ClickHouse 复制粘贴多行sql语句报错
- Duchefa丨MS培养基含维生素说明书
- Abnova丨CRISPR SpCas9 多克隆抗体方案
- Monorepo管理方法论和依赖安全
- Duchefa丨D5124 MD5A 培养基中英文说明书
- The development of research tourism practical education helps the development of cultural tourism industry
- Where is a good stock account? Is online account manager safe to open an account
- 示波器探头对测量带宽的影响
- Clear app data and get Icon
- IC popular science article: those things about Eco
猜你喜欢
教你自己训练的pytorch模型转caffe(一)
Abnova丨培养细胞总 RNA 纯化试剂盒中英文说明书
leetcode:1139. 最大的以 1 为边界的正方形
Specification of protein quantitative kit for abbkine BCA method
Abnova maxpab mouse derived polyclonal antibody solution
Abnova CRISPR spcas9 polyclonal antibody protocol
Applet page navigation
解析五育融合之下的steam教育模式
ProSci LAG-3 重组蛋白说明书
PHP反序列化+MD5碰撞
随机推荐
Typhoon is coming! How to prevent typhoons on construction sites!
从架构上详解技术(SLB,Redis,Mysql,Kafka,Clickhouse)的各类热点问题
AI 从代码中自动生成注释文档
挖财商学院给的证券账户安全吗?可以开户吗?
启牛2980有没有用?开户安全吗、
Duchefa丨D5124 MD5A 培养基中英文说明书
Duchefa low melting point agarose PPC Chinese and English instructions
Duchefa丨S0188盐酸大观霉素五水合物中英文说明书
Cutting edge technology for cultivating robot education creativity
ts 之 属性的修饰符public、private、protect
Duchefa丨MS培养基含维生素说明书
Analysis of steam education mode under the integration of five Education
The Chinese Academy of Management Sciences gathered industry experts, and Fu Qiang won the title of "top ten youth" of think tank experts
Promouvoir le développement de l'industrie culturelle et touristique par la recherche, l'apprentissage et l'enseignement pratique du tourisme
leetcode:1755. 最接近目标值的子序列和
当Steam教育进入个性化信息技术课程
Is the securities account given by the school of Finance and business safe? Can I open an account?
Duchefa丨P1001植物琼脂中英文说明书
How to renew NPDP? Here comes the operation guide!
【UE4】UnrealInsight获取真机性能测试报告