P1292 倒酒
P1292 倒酒
这个题有很多模型,这个是一个变形。
我令一个解为x
两个整数Pa和Pb,分别表示从体积为a ml的酒杯中倒出酒的次数和将酒倒入体积为b ml的酒杯中的次数(酒杯一开始为空)。
b最后是0,所有倒入b中的都会倒入a中,而每次a倒出都是从满的状态倒出来,所以剩下的x=Pb*b-Pa*a。
因为a和b要互质,所以x一定是gcd(a,b)的整数倍,不然令两边同时除以gcd(a,b),左边就是分数了,而右边要求的Pa和Pb包括a,b都是整数,那就无解了。那x最小就是gcd(a,b)。
然后扩欧求出一组解,转而求最小解。
怎么求呢?
如果Pa和Pb是一组解,那么(Pa+a)*b-(Pb+b)*a=x也成立,显然,
(Pa+a/gcd(a,b))*b-(Pb+b/gcd(a,b))*a=x也成立,而且这是可以调整的最小幅度,即不会错过最优解,可以类似的不断调整使解达到最小或变成正数。
细节问题
-ax+by=gcd(a,b),这里的变量都是正数,在套扩欧时,还是exgcd(a,b,x,y),然后不断调整使x变成负数,然后输出-x,y即可。
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<set>
#include<map>
#include<stack>
#include<cstring>
#define inf 2147483647
#define For(i,a,b) for(register int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar()
//by war
//2017.11.6
using namespace std;
int a,b;
int g;
int x,y;
void in(int &x)
{
int y=;
char c=g();x=;
while(c<''||c>'')
{
if(c=='-')
y=-;
c=g();
}
while(c<=''&&c>='')x=(x<<)+(x<<)+c-'',c=g();
x*=y;
}
void o(int x)
{
if(x<)
{
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
} int exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=,y=;
return a;
}
int t=exgcd(b,a%b,x,y);
int temp=x;
x=y;
y=temp-(a/b)*y;
return t;
} int main()
{
in(a),in(b);
g=exgcd(a,b,x,y);
a/=g;
b/=g;
while(x>)
{
x-=b;
y+=a;
}
while(x+b<=&&y>=a)
{
x+=b;
y-=a;
}
o(g),p('\n');
o(-x),p(' '),o(y);
return ;
}
P1292 倒酒的更多相关文章
- 洛谷——P1292 倒酒
P1292 倒酒 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时 ...
- 洛谷 P1292 倒酒
题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们会因为负担不 ...
- 洛谷题解 P1292 【倒酒】
原题传送门 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们 ...
- Jams倒酒
Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为a ml 和 b ml的酒杯来装载. 酒吧的生意并不好.Jams发现酒鬼们都很穷,不像他那么土豪.有时,他们 ...
- Jams倒酒(pour)
1.Jams倒酒(pour) Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为a ml 和 b ml的酒杯来装载. 酒吧的生意并不好.Jams发现酒鬼们都很 ...
- python ---倒酒!!
#!/usr/bin/env python3# -*- coding: utf-8 -*-import numbersimport numpyimport math'''三个容器分别为12升.8升.5 ...
- 华哥倒酒<区间标记,二分>
题目链接 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; t ...
- 浅谈扩展欧几里得[exgcd] By cellur925
关于扩展欧几里得从寒假时就很迷,抄题解过了同余方程,但是原理并不理解. 今天终于把坑填上了qwq. 由于本人太菜,不会用markdown,所以这篇总结是手写的(什么).(字丑不要嫌弃嘛) ****** ...
- CG资源网 - Maya教程
Maya中mentalray灯光渲染终极训练视频教程 http://www.cgtsj.com/cg/f/vx3627/index.html Maya无人机建模制作训练视频教程第一季 http://w ...
随机推荐
- IO流总结笔记二
Reader |--InputStreamReader |--FileReader:专门用于处理文件的字符读取流对象 Writer |--OutputStreamWriter |--FileWri ...
- windows cmd相关操作
一:文件夹1. 新建文件夹方式一:md[盘符:\][路径\]新目录例如:md c:\test\newtest 方式二:先使用cmd进入需要新建文件的根目录下,使用md或者mkdir 直接创建文件夹ne ...
- JSON和JSONP的区别,以及使用方法
(一)场景 在拉京东城市选择的基础数据时候,遇到被服务器拒绝的情况,也就是ajax跨域问题 (二)json和jsonp 说的直白一点,在我们做ajax异步的一些功能的时候,一定会或多或少的遇到两个问题 ...
- 数据库操作之整合Mybaties和事务讲解 5节课
1.SpringBoot2.x持久化数据方式介绍 简介:介绍近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库 开发流程麻烦 ...
- K-means聚类算法原理和C++实现
给定训练集$\{x^{(1)},...,x^{(m)}\}$,想把这些样本分成不同的子集,即聚类,$x^{(i)}\in\mathbb{R^{n}}$,但是这是个无标签数据集,也就是说我们再聚类的时候 ...
- 扫AR
- k64 datasheet学习笔记3---Chip Configuration之Clock modules
1.前言 本文主要讲述chip configure之clock配置相关的内容,主要包含如下三个部分: MCG configuration:Multipurpose clock generator OS ...
- openstack swift节点安装手册3-最后的安装配置及验证
以下步骤都在controller节点上执行 1.远程获取/etc/swift/swift.conf文件: curl -o /etc/swift/swift.conf https://git.opens ...
- windows系统安装jdk并设置环境变量
CLASSPATH:JDK1.5之后的版本不需要配置.安装JDK 选择安装目录 安装过程中会出现两次安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的 ...
- KVM -> 虚拟机在线热添加技术_04
热添加技术 1.KVM在线热添加硬盘