2152:花盆
最新推荐文章于 2024-11-21 11:23:25 发布

桃夭~ 于 2022-10-12 23:02:48 发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
总时间限制:
1000毫秒
内存限制:
65536kB
描述
给你两个罐子,体积分别为A升和B升。可以执行以下操作:
FILL(i ) 从水龙头中填充罐i (1 ≤ i ≤ 2); DROP(i) 将罐i排空到排水管; POUR(i,j) 从锅i倒入锅j;在此操作之后,锅j已满(锅i中可能还剩一些水),或者锅i空了(其所有内容物都已移至锅j)。编写一个程序,找出这些操作的最短可能序列,从而在其中一个罐子中产生恰好C升的水。
输入
第一行也是唯一一行是数字A、B和C。这些都是 1 到 100 范围内的整数,且C ≤max( A , B )。
输出
输出的第一行必须包含操作序列K的长度。以下K行必须分别描述一项操作。如果有多个最小长度的序列,则输出其中任何一个。如果无法达到预期的结果,文件的第一行也是唯一的行必须包含单词“不可能”。
样例输入
3 5 4
样例输出
6
填充(2)
倒(2,1)
掉落(1)
倒(2,1)
填充(2)
倒(2,1)
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct ping
{
int nowav,nowbv;
string work;
int father;
int leng;
}myqueue[1000000];
int visited[105][105];
string ans[100000];
int main()
{
memset(visited,0,sizeof(visited));
int A,B,C,flag=1;
cin>>A>>B>>C;
int qhead=0,qtail=1;
myqueue[qhead].nowav=0,myqueue[qhead].nowbv=0,myqueue[qhead].leng=0;
visited[0][0]=1;
while(qhead!=qtail)
{
ping s=myqueue[qhead];
if(s.nowav==C||s.nowbv==C){
flag=0;
break;}
if(s.nowav!=A&&!visited[A][s.nowbv])
{
myqueue[qtail].nowbv=s.nowbv;
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowav=A;
myqueue[qtail].father=qhead;
myqueue[qtail].work="FILL(1)";
visited[A][s.nowbv]=1;
qtail++;
}
if(s.nowbv!=B&&!visited[s.nowav][B])
{
myqueue[qtail].nowav=s.nowav;
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowbv=B;
myqueue[qtail].father=qhead;
myqueue[qtail].work="FILL(2)";
visited[s.nowav][B]=1;
qtail++;
}
if(s.nowav!=0&&!visited[0][s.nowbv])
{
myqueue[qtail].nowbv=s.nowbv;
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowav=0;
myqueue[qtail].father=qhead;
myqueue[qtail].work="DROP(1)";
visited[0][s.nowbv]=1;
qtail++;
}
if(s.nowbv!=0&&!visited[s.nowav][0])
{
myqueue[qtail].nowav=s.nowav;
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowbv=0;
myqueue[qtail].father=qhead;
myqueue[qtail].work="DROP(2)";
visited[s.nowav][0]=1;
qtail++;
}
if(s.nowbv+s.nowav<B&&!visited[0][s.nowbv+s.nowav])
{
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowbv=s.nowbv+s.nowav;
myqueue[qtail].nowav=0;
myqueue[qtail].father=qhead;
myqueue[qtail].work="POUR(1,2)";
visited[0][s.nowbv+s.nowav]=1;
qtail++;
}
if(s.nowbv+s.nowav>=B&&!visited[s.nowbv+s.nowav-B][B])
{
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowbv=B;
myqueue[qtail].nowav=s.nowbv+s.nowav-B;
myqueue[qtail].father=qhead;
myqueue[qtail].work="POUR(1,2)";
visited[s.nowbv+s.nowav-B][B]=1;
qtail++;
}
if(s.nowbv+s.nowav<A&&!visited[s.nowbv+s.nowav][0])
{
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowav=s.nowbv+s.nowav;
myqueue[qtail].nowbv=0;
myqueue[qtail].father=qhead;
myqueue[qtail].work="POUR(2,1)";
visited[s.nowbv+s.nowav][0]=1;
qtail++;
}
if(s.nowbv+s.nowav>=A&&!visited[A][s.nowbv+s.nowav-A])
{
myqueue[qtail].leng=s.leng+1;
myqueue[qtail].nowav=A;
myqueue[qtail].nowbv=s.nowbv+s.nowav-A;
myqueue[qtail].father=qhead;
myqueue[qtail].work="POUR(2,1)";
visited[A][s.nowbv+s.nowav-A]=1;
qtail++;
}
qhead++;
}
if(flag)
{
cout<<"impossible";
return 0;
}
int K=myqueue[qhead].leng;
cout<<K<<endl;
for(int i=1;i<=K;++i)
{
ans[i]=myqueue[qhead].work;
qhead=myqueue[qhead].father;
}
for(int i=K;i>=1;--i)
{
cout<<ans[i];
if(i!=1)
cout<<endl;
}
}
相关知识
接骨木花兰花在自然保护区图片
【拍客】延时拍摄花朵绽放唯美瞬间
怎么防治花草上的蚜虫
【花盆花盆】花盆花盆价格表
花盆选购,花盆分类,花盆搭配,花盆养护
玻璃钢花盆、半球形花盆、艺术花盆、组合花盆
长方形花盆、玻璃钢花盆、现代艺术花盆、北京花盆
供应供应玻璃钢花盆 树脂花盆 裂纹花盆 现代花盆
盆景花盆价格 室外景观花盆出售 户外花盆 广场花盆园艺园林花盆批发
【花盆/LED花盆/塑料花盆】价格
原文链接: 2152:花盆 https://www.huajiangbk.com/newsview688191.html
| 上一篇: 护栏马鞍PP花盆花箱 | 下一篇: 一种新型的自动灌溉花盆 -挑战杯 |





