The Balance(扩展欧几里得模板题)
来源:互联网 发布:淘宝c店开店流程 编辑:程序博客网 时间:2024/06/07 06:48
【题目来源】:https://vjudge.net/problem/POJ-2142
【题意】
求解ax+by=c的关于x,y的和最小的一组解。
【思路】
解决二元一次方程组,不多说,直接扩展欧几里得模板套上。
然后,题目要求求出的x+y的值(绝对值)最小,所以先求出x0,y0,
推出第一个x1(最小非负数),通过关系式来求解相应的y1。
推出第一个y2(最小非负数),通过关系式来求解相应的x2。
比较这两组最优解,得出一个最最优解。
【代码】
#include<set>#include<map>#include<stack>#include<cmath>#include<queue>#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<limits.h>#include<algorithm>#define mem(a,b) memset(a,b,sizeof(a))using namespace std;const int mod=1e9+7;typedef unsigned long long ll;typedef long long LL;LL ab(LL a){ return a<0?-a:a;}LL exgcd(LL a,LL b,LL &x,LL &y){ if(b==0) { x=1; y=0; return a; } LL d=exgcd(b,a%b,y,x); y-=a/b*x; return d;}int main(){ LL a,b,c,x,y; while(~scanf("%lld%lld%lld",&a,&b,&c)) { if(!a&&!b&&!c) { break; } LL d=exgcd(a,b,x,y); if(c%d) printf("no solution\n"); else { LL x1=(c/d*x%(b/d)+(b/d))%(b/d); LL y1=(c-a*x1)/b; LL y2=(c/d*y%(a/d)+(a/d))%(a/d); LL x2=(c-b*y2)/a; if(ab(x1)+ab(y1)>=ab(y2)+ab(x2)) { printf("%lld %lld\n",ab(x2),ab(y2)); } else { printf("%lld %lld\n",ab(x1),ab(y1)); } } }}
阅读全文
0 0
- The Balance(扩展欧几里得模板题)
- The Balance 扩展欧几里得
- poj2142(THE BALANCE)(扩展欧几里得入门题)
- The Balance(扩展欧几里得算法)
- POJ 2142The Balance(扩展欧几里得)
- POJ-2142-The Balance(扩展欧几里得)
- poj2142 The Balance(扩展欧几里得算法)
- POJ2142 The Balance(扩展欧几里得算法)
- POJ 2142 The Balance 扩展欧几里得
- poj 2142 The Balance (基础扩展欧几里得)
- poj 2142 The Balance(扩展欧几里得)
- poj 2142 The Balance 扩展欧几里得
- [POJ 2142]The Balance(扩展欧几里得)
- poj 2142 The Balance 扩展欧几里得
- poj 2142 The Balance 数论-扩展欧几里得
- poj 2142 The Balance (扩展欧几里得 数学)
- poj 2142 The Balance 扩展欧几里得
- POJ The Balance —— 扩展欧几里得
- Jquery高级编程(三)
- 史上最简单的定时发布文章实现,不论语言。这是思想
- 1057. 数零壹(20) cin,get,gets,getline输入总结
- 杭电-自动理论教学质量评价
- Java菜鸟到大牛学习路线培训教程
- The Balance(扩展欧几里得模板题)
- ksh 命令第一行 命令行参数
- 【MyBatis】SqlSession概念辨析
- 关于mybatis主键的重复问题
- 利用JS 事件 与 Cnavas绘图 以及 H5 缓存写的一个手势解锁(三)
- Don‘t call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
- 在VC中调用BCB编写的标准DLL函数库
- 以高斯塞德尔法和牛顿拉夫逊法为思想的基于Matlab的电力系统潮流计算
- hdu 5692 Snacks(dfs序+线段树)