POJ - 2142 扩展欧几里得
题目链接
POJ-2142
题意
给两种没有数量限制的砝码,重量分别为a和b,现在要在天平上称重量为d的物品,砝码可以放在天平的两侧,问能不能称,不能称输出-1,否则输出使用两种砝码的个数,要求个数和最小
思路
对于天平来说要满足力臂相等,即ax+by=dax+by=dax+by=d,其中∣x∣|x|∣x∣表示第一种砝码的数量,∣y∣|y|∣y∣是第二种砝码的数量,那么答案就是∣x∣+∣y∣|x|+|y|∣x∣+∣y∣,当xy同号时表示他俩在同一侧,异号表示在两侧。
现在要求∣x∣+∣y∣|x|+|y|∣x∣+∣y∣最小。可以证明当整数解(x,y)(x,\ y)(x, y)离坐标轴最近的时候他们的绝对值之和最小,然后枚举一下两个分别与x轴和y轴最近的两个点,选一个最小的即可。
代码
#include <cstdio>inline long long abs(long long x) { return x < 0 ? -x : x; }long long exgcd(long long a, long long b, long long& x, long long& y) {if (!b) {x = 1;y = 0;return a;}long long t = exgcd(b, a % b, y, x);y -= a / b * x;return t;
}bool solve(long long a, long long b, long long c, long long& x, long long& y) {long long g = exgcd(a, b, x, y);if (c % g) return false;x *= c / g;y *= c / g;long long tmp = abs(b / g);x = (x % tmp + tmp) % tmp;y = (c - a * x) / b;return true;
}int a, b, c;
int main() {while (~scanf("%d%d%d", &a, &b, &c)) {if (!a && !b && !c) break;long long x1, x2, y1, y2;if (!solve(a, b, c, x1, y1))puts("no solution");else {solve(b, a, c, y2, x2);if (abs(x1) + abs(y1) > abs(x2) + abs(y2))printf("%lld %lld\n", abs(x2), abs(y2));elseprintf("%lld %lld\n", abs(x1), abs(y1));}}return 0;
}
POJ - 2142 扩展欧几里得相关推荐
- POJ 2142——扩展欧几里得
题目是很裸的扩展欧几里得,但是对x,y有限制条件,要求所有x,y中abs(x)+abs(y)最小,在这个条件下要求abs(a* x)+abs(b* y)最小 显然我们需要用扩展欧几里得求得一组解,问题 ...
- POJ 1061扩展欧几里得
扩展欧几里得的模板题,需要注意的是为了得到一个最小正数解我们要使ax+by=c中的a,b都是正数 #include<cstdio> #include<cstring> #inc ...
- POJ - 2142 The Balance(扩展欧几里得)
题目链接:点击查看 题目大意:给出两种重量的砝码,我们需要利用天平称出指定重量的药物,我们需要求出这两种砝码各自的数量,使得砝码数量之和最小 题目分析:我们可以先列出关系式,假设两个砝码的重量分别为a ...
- 扩展欧几里得 POJ 1061
感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...
- POJ - 1061 青蛙的约会(扩展欧几里得)
题目链接:点击查看 题目大意:两只青蛙在一个单向循环数轴上跳动,给出初始位置和每秒跳动的距离以及数轴长度,问是否可以相遇,若能相遇求出最小时间 题目分析:自从第一次接触扩展欧几里得以来已经有半年时间了 ...
- POJ 1061 青蛙的约会 (扩展欧几里得)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 97673 Accepted: 18409 Descripti ...
- POJ 2142: 扩展欧几里得算法
POJ 2142: The Balance Description Data 思路 扩展欧几里得算法 线性组合 Code --扩展欧几里得算法 原题传送门 Description Ms. Iyo Ki ...
- poj-青蛙的约会(扩展欧几里得)nyoj-小柯的约会
由题意可列出方程 x + m * s - (y + n * s) = k * l; 化简得 (n-m)*s + k*l = x - y 化简得 (n-m)*s = x - y (mod l); ...
- 欧几里得定理与扩展欧几里得定理
欧几里的定理(辗转相除法): gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数 证明: 设 a > b c = a%b a = k * b + c (k为某个整 ...
- 求解线性同余方程--扩展欧几里得
资料来源:https://blog.csdn.net/ //求解ax=b(mod m) 返回0为无解,否则返回gcd(a,m)个mod m意义下的解,用X[]存 int mod(int a, int ...
最新文章
- 每日一问一周汇总:第1期
- ASP.NET MVC 4 (九) 模型绑定
- 读取STM32单片机-ID操作
- 美丽新世界:当代日本视觉文化展
- 可变参数模板、右值引用带来的移动语义完美转发、lambda表达式的理解
- LeetCode - 35. Search Insert Position
- Loj #6060. 「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
- yum被锁Another app is currently holding the yum lock; waiting for it to exit...
- 解决word、excel、ppt文件图标是空白的问题
- risc 服务器 操作系统,数据中心系统用RISC还是CISC?
- python与贝叶斯_python-与PyMC3的贝叶斯相关
- HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解
- jQuery倒计时进度条
- 纯C#实现的DHT爬虫和磁力搜索引擎 - btcherry.com
- 如何做好一个APP开发项目?需要规避以下误区
- 微信小程序 - 实现搜索界面(带热搜、搜索历史和结果页)
- python 白噪声检验 结果-时间序列 平稳性检验 白噪声 峰度 偏度
- 如何进入/home/user/.wine
- 【交互设计】七步打造手机网站
- 寒冬咳嗽不妨试试中医小偏方
热门文章
- Android解决Can't create handler inside thread that has not called Looper.prepare()
- JQuery 解决多个文件下载只下载一个的问题
- 数据库中平凡函数和非平凡函数,完全函数依赖和部分函数
- 几行代码教你爬取LOL皮肤图片
- 产品管理,产品策划,产品设计
- 弗吉尼亚理工计算机科学排名,弗吉尼亚理工大学计算机科学专业
- 基于OpenSSL,实现SM2签名数据的ASN1编码转换
- 服务器解析错误_常见的域名解析错误原因及应对方法
- android-keystool
- VendorNPC.lua --随身商人