给一个水壶装水;
把一个水壶倒空;
从一个水壶倒进另一个水壶。
当从一个水壶倒进另一个水壶时,如果第一个水壶倒空,或者第二个水壶装满就不能再倒了。例如,一个水壶 A 是 5 加仑和另一个水壶 B 是 6 加仑,水量是 8 加仑,则从水壶 A 倒进水壶 B 时,让水壶B充满水而水壶 A 剩 3 加仑水。
问题由3个参数: C_a, C_b和 N ,分别表示水壶 A 和 B 的容量,目标水量 N 。解决问题的目标是,给出一系列倒水的步骤,使水壶 B 中的水量恰好是 N 。
输入输出格式
输入格式:
第一行为数据组数 T 。
接下来的 T行,每行三个数字 C_a, C_b和 N ,意义如题目所示。
T 不超过 30 组, 0<C_a≤N≤C_b≤1000 ,且 C_a和 C_b 互质。
输出格式:
输出共为 T 行,第一个数字为要达成的完成次数 a_i(题目保证存在解)。
接下来 a_i 个数字,表示各种操作:
1操作: fill A 意为给 AA 灌满水
2操作: fill B
3操作: empty A 意为将 AA 中水倒空
4操作: empty B
5操作: pour B A 意为将 B 中水倒到 A 中(直到 AA 满或者 BB 中水没有剩余)
6操作: pour A B输入输出样例
输入样例#1:
2
3 5 4
5 7 3
输出样例#1:
6 2 5 3 5 2 5
6 1 6 1 6 4 6
输入样例#2:
1
26 29 11
输出样例#2:
22 1 6 1 6 4 6 1 6 4 6 1 6 4 6 1 6 4 6 1 6 4 6
说明
开启了spj。
如果你的方案比答案优,会提示UKE,此时请联系管理员修改数据。
如果你的方案比答案差,分数会相应减损。
作者: 张笑宇 时间: 2018-6-11 22:18
当从一个水壶倒进另一个水壶时,如果第一个水壶倒空,或者第二个水壶装满就不能再倒了。例如,一个水壶 A 是 5 加仑和另一个水壶 B 是 6 加仑,水量是 8 加仑,则从水壶 A 倒进水壶 B 时,让水壶B充满水而水壶 A 剩 3 加仑水。 什么意思啊???作者: 张笑宇 时间: 2018-6-15 00:04
为什么一个数据中第二个数据就都是0了呢???
#include<iostream>
using namespace std;
int t,i,j,k,v;
const int mx=100010;
const int mm=2010;
const int tt=35;
int n[mx],a[mx],b[mx],f[mm][mm];///n次数
int ka[tt],kb[tt],kn[tt];
bool bb[mm][mm],bbb;///f情况
int head,tail,va,vb,nn;
void cle()///clear
{
for (int ic=0; ic<=mx-2; ic++)
{
a[ic]=0,b[ic]=0,n[ic]=0;
}
for (int ic=1; ic<=mm-2; ic++)
for (int id=1; id<=mm-2; id++)
{
f[ic][id]=0,bb[ic][id]=0;
}
head=1,tail=2,bbb=true;
}
void pp()
{
for (int ii=1; ii<=10; ii++)
cout<<a[ii]<<" "<<b[ii]<<" "<<n[ii]<<endl;
}
void pp2()
{
for (k=1;k<=10;k++)
for (v=1;v<=10;v++) cout<<bb[k][v];
}
int main()
{
cin>>t;
for (int it=1; it<=t; it++)
{
cin>>ka[it]>>kb[it]>>kn[it];
va=ka[it],vb=kb[it],nn=kn[it];///va,vb容量 nn B中目标水量