Jams倒酒(pour)

1Jams倒酒(pour)

Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为a ml 和 b ml的酒杯来装载。

酒吧的生意并不好。Jams发现酒鬼们都很穷,不像他那么土豪。有时,他们会因为负担不起a ml 或者 b ml酒的消费,而不得不离去。因此,Jams决定出手第三种体积的啤酒(较小体积的啤酒)。

Jams只有两种杯子,容积分别为 a ml 和 b ml,而且啤酒杯是没有刻度的。他只能通过两种杯子和酒桶间的互相倾倒来得到新的体积的酒。

倒酒步骤为:

(1)            规定a>=b

(2)            酒桶容积无限,酒桶中酒体积无限大。

(3)            只能包含三种可能的倒酒操作:

1、 将酒桶中的酒倒入容积为b ml的酒杯中;

2、 将容积为a ml的酒杯中的酒倒入酒桶;

3、 将容积为b ml的酒杯中的酒倒入容积为 a ml的酒杯中。

(4)            每次倒酒必须把杯子倒满或者把被倾倒的杯子倒空。

Jams希望通过若干次倾倒得到容积为 a ml酒杯中剩下的就体积尽可能小,他请求你帮助他设计倾倒方案。

输入:

两个整数a,b(0<b<=a<=10^9)

输出

第一行一个整数,表示可以得到的最小体积的酒。

第二行两个整数Pa和Pb(中间用一个空格分开),分别表示从体积为a ml的酒杯中到处酒的次数和将酒倒入体积为b ml的酒杯的次数。

若有多种可能的Pa,Pb满足要求,那么请输出Pa最小的。若Pa最小的时候有多个Pb,那么输出Pb最小的。

样例输入

5 3

样例输出

1

1 2

倾倒方案为:

1、 桶->B;

2、 B->A;

3、 桶->B;

4、 B->A;

5、 A->桶;

6、 B->A;

对于20%的数据,pa,pb总和不超过5

对于60%的数据,pa<=10^8

对于100%的数据,0<b<=a<=10^9

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define ll long long
int a,b;
int minn;
int xx,yy;
int gcd(int x,int y)
{
    if(y==0) return x;
    else return gcd(y,x%y);
}
void exgcd(int x,int y)
{
    if(y==0)
    {
        xx=1;
        yy=0;
        return ;
    }
    else
    {
        exgcd(y,x%y);
        int t=xx;
        xx=yy;
        yy=t-x/y*yy;
    }
}
int main()
{
    freopen("pour.in","r",stdin);
    freopen("pour.out","w",stdout);
    cin>>a>>b;
    minn=gcd(a,b);
    cout<<minn<<endl;
    a/=minn;b/=minn;
    exgcd(a,b);
    while(yy<0) yy+=a;
    xx=(1-yy*b)/a;
    cout<<-xx<<" "<<yy;
    fclose(stdin);fclose(stdout);
    return 0;
}
时间: 2024-10-27 05:36:10

Jams倒酒(pour)的相关文章

【NOIP2016模拟赛(五)】Jams 倒酒(pour) - 扩展欧几里得

Problem Pour 题目大意 一个人要用两个装水量一定的杯子互相倒水,求最后能搞出来最少的水量是多少以及倒的次数. Solution 我们不知道为什么突然就发现了这个最少的水量一定就是最大公约数. 然后我们不知道为什么突然就想到了扩展欧几里得算法. 首先我们有$ax + by =\gcd(a,b)$ 然后我们就可以想到,这个x和y其实就是倒的次数嘛. 于是就用扩欧算出来了x,y.但是还没有完,题目要求我们求出最小的b. 那么我们知道,只要我们找到一组特殊的解 x0 和 y0,我们就可以用

Jams倒酒

Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为a ml 和 b ml的酒杯来装载. 酒吧的生意并不好.Jams发现酒鬼们都很穷,不像他那么土豪.有时,他们会因为负担不起a ml 或者 b ml酒的消费,而不得不离去.因此,Jams决定出手第三种体积的啤酒(较小体积的啤酒). Jams只有两种杯子,容积分别为 a ml 和 b ml,而且啤酒杯是没有刻度的.他只能通过两种杯子和酒桶间的互相倾倒来得到新的体积的酒. 倒酒步骤为: (1)         

洛谷——P1292 倒酒

P1292 倒酒 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们会因为负担不起aml或者bml啤酒的消费,而不得不离去.因此,Winy决定出售第三种体积的啤酒(较小体积的啤酒). Winy只有两种杯子,容积分别为a ml和b ml,而且啤酒杯是没有刻度的.他只能通过两种杯子和酒桶间的互相倾倒来得到新的体积的酒. 为了简化倒酒的步骤,Winy规定: (1)a

P1292 倒酒

传送门 数学题 扩展gcd #include<bits/stdc++.h> using namespace std; int exgcd(int a,int b,int &x,int &y){ if(!b){ x=1; y=0; return a; } int r=exgcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return r; } int main(){ int x,y,a,b; cin>>a>>b; int g

泊松分酒

泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多. 有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊松分酒". 在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:"韩信走马分油"问题. 有3个容器,容量分别为12升,8升,5升.其中12升中装满油,另外两个空着. 要求你只用3个容器操作,最后使得某个容器中正好有6升油. 下面的列表是可能的操作状态记录: 12,0,

【转】崂山道士

作品原文/崂山道士[<聊斋志异>篇目] 编辑 崂山道士图册 邑有王生,行七,故家子.少慕道,闻劳山多仙人,负笈往游.登一顶,有观宇,甚幽.一道士坐蒲团上,素发垂领,而神观爽迈.叩而与语,理甚玄妙.请师之.道士曰:"恐娇惰不能作苦."答言:"能之."其门人甚众,薄暮毕集.王俱与稽首,遂留观中.凌晨,道士呼王去,授以斧,使随众采樵.王谨受教.过月余,手足重茧,不堪其苦,阴有归志.一夕归,见二人与师共酌,日已暮,尚无灯烛.师乃剪纸如镜,黏壁间.俄顷,月明辉室,

开学第一天

上次开会大校长说31号会通知我们这四个新人分在哪里,那天我一直没有接到电话,所以我就直接就打电话过去问了.说我分在莲坊,说可以直接去报到,后面又说先来中心小学.听到这分配,我心里有点难受,说不出的味道.所以我晚上吃饭的时候没有告诉父母这个消息,还是觉得明天9月1号告诉他们,我心想他们听到这个消息些许有点失落吧. 今天是9月1号,开学的第一天.我直接骑摩托车,饶了一个大圈去了中心小学.在学校门口就看到好多家长和学生,进学校后,我直接进了以前同学的房间想问问她情况,看她房间好多家长都在弄报名的事情.

[转]100个经典C语言程序(益智类问题)

目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 1.7 分数四则运算 17.平分七筐鱼 18.有限5位数 19. 8 除不尽的数 21.4位反序数 22.求车速 23.阿姆斯特朗数 24.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+c

第16章 潘多拉的盒子

在分班后的高二上半学期的期末,孙斌新忽然不想上学了,想去当兵.我们不明白是什么导致他会有这样的想法.是因为高中的压力吗,还是适应不了这炼狱般的生活呢?我们不知道,知道的只是孙斌新在期末考完回家的路上,忽然对我们说,过年时他不会再去学校了. 无论我们怎么问都问不出一点消息.他就爱这样,有什么事情都不会告我们说的.其实不只我们,他如果有事甚至连他爸妈都不会说.他喜欢一个人琢磨,他说他的路他要自己走,这样将来才不会后悔.可是他骨子里又藏着一份怯弱,害怕会出错.所以他会时不时的小翼翼的泄漏些自己的秘密.