题目链接

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 扩展欧几里得相关推荐

  1. POJ 2142——扩展欧几里得

    题目是很裸的扩展欧几里得,但是对x,y有限制条件,要求所有x,y中abs(x)+abs(y)最小,在这个条件下要求abs(a* x)+abs(b* y)最小 显然我们需要用扩展欧几里得求得一组解,问题 ...

  2. POJ 1061扩展欧几里得

    扩展欧几里得的模板题,需要注意的是为了得到一个最小正数解我们要使ax+by=c中的a,b都是正数 #include<cstdio> #include<cstring> #inc ...

  3. POJ - 2142 The Balance(扩展欧几里得)

    题目链接:点击查看 题目大意:给出两种重量的砝码,我们需要利用天平称出指定重量的药物,我们需要求出这两种砝码各自的数量,使得砝码数量之和最小 题目分析:我们可以先列出关系式,假设两个砝码的重量分别为a ...

  4. 扩展欧几里得 POJ 1061

    感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...

  5. POJ - 1061 青蛙的约会(扩展欧几里得)

    题目链接:点击查看 题目大意:两只青蛙在一个单向循环数轴上跳动,给出初始位置和每秒跳动的距离以及数轴长度,问是否可以相遇,若能相遇求出最小时间 题目分析:自从第一次接触扩展欧几里得以来已经有半年时间了 ...

  6. POJ 1061 青蛙的约会 (扩展欧几里得)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 97673   Accepted: 18409 Descripti ...

  7. POJ 2142: 扩展欧几里得算法

    POJ 2142: The Balance Description Data 思路 扩展欧几里得算法 线性组合 Code --扩展欧几里得算法 原题传送门 Description Ms. Iyo Ki ...

  8. poj-青蛙的约会(扩展欧几里得)nyoj-小柯的约会

    由题意可列出方程 x + m * s - (y + n * s) = k * l; 化简得   (n-m)*s + k*l = x - y 化简得   (n-m)*s = x - y (mod l); ...

  9. 欧几里得定理与扩展欧几里得定理

    欧几里的定理(辗转相除法): gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数 证明: 设 a > b c = a%b a = k * b + c (k为某个整 ...

  10. 求解线性同余方程--扩展欧几里得

    资料来源:https://blog.csdn.net/ //求解ax=b(mod m) 返回0为无解,否则返回gcd(a,m)个mod m意义下的解,用X[]存 int mod(int a, int ...

最新文章

  1. 每日一问一周汇总:第1期
  2. ASP.NET MVC 4 (九) 模型绑定
  3. 读取STM32单片机-ID操作
  4. 美丽新世界:当代日本视觉文化展
  5. 可变参数模板、右值引用带来的移动语义完美转发、lambda表达式的理解
  6. LeetCode - 35. Search Insert Position
  7. Loj #6060. 「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
  8. yum被锁Another app is currently holding the yum lock; waiting for it to exit...
  9. 解决word、excel、ppt文件图标是空白的问题
  10. risc 服务器 操作系统,数据中心系统用RISC还是CISC?
  11. python与贝叶斯_python-与PyMC3的贝叶斯相关
  12. HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解
  13. jQuery倒计时进度条
  14. 纯C#实现的DHT爬虫和磁力搜索引擎 - btcherry.com
  15. 如何做好一个APP开发项目?需要规避以下误区
  16. 微信小程序 - 实现搜索界面(带热搜、搜索历史和结果页)
  17. python 白噪声检验 结果-时间序列 平稳性检验 白噪声 峰度 偏度
  18. 如何进入/home/user/.wine
  19. 【交互设计】七步打造手机网站
  20. 寒冬咳嗽不妨试试中医小偏方

热门文章

  1. Android解决Can't create handler inside thread that has not called Looper.prepare()
  2. JQuery 解决多个文件下载只下载一个的问题
  3. 数据库中平凡函数和非平凡函数,完全函数依赖和部分函数
  4. 几行代码教你爬取LOL皮肤图片
  5. 产品管理,产品策划,产品设计
  6. 弗吉尼亚理工计算机科学排名,弗吉尼亚理工大学计算机科学专业
  7. 基于OpenSSL,实现SM2签名数据的ASN1编码转换
  8. 服务器解析错误_常见的域名解析错误原因及应对方法
  9. android-keystool
  10. VendorNPC.lua --随身商人