E - The Balance POJ - 2142 (欧几里德)
题意:有两种砝码m1, m2和一个物体G,m1的个数x1, m2的个数为x2, 问令x1+x2最小,并且将天平保持平衡 !输出 x1 和 x2

题解:这是欧几里德拓展的一个应用,欧几里德求不定方程ax+by=c:
先介绍一下:
1. ax+by=gcd(a, b) 相当于a,b互素。则同过欧几里德拓展,有整数解x, y
2.对于 ax+by=c 则转化为 两边同时除以c 再乘以 gcd(a/c, b/c) 这样就化成了 1结论!
3.求一个x的最小值为 x=x*c/gcd(a, b); 为了保证为正数, x=(x%(b/gcd(a, b))+b/gcd(a, b))%(b/gcd(a, b));
4.注意:x和y的地位相同的!注意:要他们的代表意义!
思路:
已知推出公式 m1x+m2y=C 由欧几里德拓展 求出 x, y
然后求出最小的x1 ,然后根据方程 解出 y1=(C- m1x1)/m2;
同理求出最小的y2 ,根据方程求出 x2 如果为负数就化为正数
ac代码:
#include<cstdio>
#define ll long long void exgcd(ll a, ll b, ll &d, ll &x, ll &y)
{
if (!b){ d = a; x = ; y = ; }
else{ exgcd(b, a%b, d, y, x); y -= x*(a / b); }
}
int main()
{
ll A, B, C;
while (scanf("%lld%lld%lld", &A, &B, &C) != EOF && (A || B || C)){
ll x, y, g;
exgcd(A, B, g, x, y);
ll x1 = x*C / g;
x1 = (x1 % (B / g) + (B / g)) % (B / g);
ll y1 = (C - A*x1) / B; if (y1 < )y1 = -y1; ll y2 = y*C / g;
y2 = (y2 % (A / g) + (A / g)) % (A / g);
ll x2 = (C - B*y2) / A; if (x2 < )x2 = -x2;
if (x1 + y1 < x2 + y2)
{
printf("%lld %lld\n", x1, y1);
}
else
{
printf("%lld %lld\n", x2, y2);
}
}
}
E - The Balance POJ - 2142 (欧几里德)的更多相关文章
- The Balance POJ 2142 扩展欧几里得
Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of ...
- 扩展欧几里得(E - The Balance POJ - 2142 )
题目链接:https://cn.vjudge.net/contest/276376#problem/E 题目大意:给你n,m,k,n,m代表当前由于无限个质量为n,m的砝码.然后当前有一个秤,你可以通 ...
- The Balance POJ - 2142
首先,可以知道题目要求解一个\(ax+by=c\)的方程,且\(x+y\)最小. 感性证明: 当\(a>b\)时,\(y\)取最小正整数解,\(b\)减的多,\(a\)增的少,此时\(x+y\) ...
- POJ.2142 The Balance (拓展欧几里得)
POJ.2142 The Balance (拓展欧几里得) 题意分析 现有2种质量为a克与b克的砝码,求最少 分别用多少个(同时总质量也最小)砝码,使得能称出c克的物品. 设两种砝码分别有x个与y个, ...
- POJ 2142 The Balance【扩展欧几里德】
题意:有两种类型的砝码,每种的砝码质量a和b给你,现在要求称出质量为c的物品,要求a的数量x和b的数量y最小,以及x+y的值最小. 用扩展欧几里德求ax+by=c,求出ax+by=1的一组通解,求出当 ...
- poj 2142 The Balance
The Balance http://poj.org/problem?id=2142 Time Limit: 5000MS Memory Limit: 65536K Descripti ...
- POJ 2142 The Balance(exgcd)
嗯... 题目链接:http://poj.org/problem?id=2142 AC代码: #include<cstdio> #include<iostream> using ...
- POJ 2142 The Balance (解不定方程,找最小值)
这题实际解不定方程:ax+by=c只不过题目要求我们解出的x和y 满足|x|+|y|最小,当|x|+|y|相同时,满足|ax|+|by|最小.首先用扩展欧几里德,很容易得出x和y的解.一开始不妨令a& ...
- POJ - 2142 The Balance(扩展欧几里得求解不定方程)
d.用2种砝码,质量分别为a和b,称出质量为d的物品.求所用的砝码总数量最小(x+y最小),并且总质量最小(ax+by最小). s.扩展欧几里得求解不定方程. 设ax+by=d. 题意说不定方程一定有 ...
随机推荐
- vmware--查看链接克隆依赖关系
我们都知道,虚拟机克隆有完全克隆和链接克隆两种克隆方式.当根据模版去链接克隆出很多机器时,时间一长或者把克隆后的机器改名了,我们就忘记了哪台机器是克隆出来的,哪台是直接装的.如果不小心把模版机器给删除 ...
- LinQ是什么?
•LINQ(发音:Link)是语言级集成查询(Language INtegrated Query) •LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询 •LINQ的目标是 ...
- SQL Server 2012使用Offset/Fetch Next实现分页
在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows Fetch Next ... Rows onl ...
- MVC中 jquery.validate取消忽略对hidden的验证
<script type="text/javascript"> $.validator.setDefaults({ //取消 忽略对hidden的验证 ignore: ...
- SqlServer--用代码创建和删除数据库和表
创建数据库,创建表,设置主键数据库的分离和附加MS SQLServer的每个数据库包含:1个主数据文件(.mdf)必须.1个事务日志文件(.ldf)必须.可以包含:任意多个次要数据文件(.ndf)多个 ...
- Script error.深度测试
Script error.全面解析中我们介绍了Script error.的由来.这篇博客,我们将各种情况(不同浏览器.本地远程托管JS文件)考虑进去,进行一个深度的测试,为读者带来一个全面的了解. G ...
- Python全栈学习_day009知识点
今日大纲: . 函数的初识 . 函数的返回值 . 函数的参数 1. 函数的初识 统计字符串s的总个数(不能用len) s='fkahfkahofijalkfkadhfkjadhf' count = f ...
- pycharm技巧
常用快捷键 1.Ctrl + Enter:在下方新建行但不移动光标: 2.Shift + Enter:在下方新建行并移到新行行首: 3.Ctrl + /:注释(取消注释)选择的行: 4.Ctrl + ...
- SQL Anywhere5.5: Metadata
http://dcx.sybase.com/1101/en/dbprogramming_en11/ianywhere-data-sqlanywhere-saconnection-getschem633 ...
- JqGrid: Add,Edit,Del in asp.net
https://github.com/1rosehip/jplist https://github.com/free-jqgrid/jqGrid https://plugins.jquery.com/ ...