POJ2142(扩展欧几里得)
| Time Limit: 5000MS | Memory Limit: 65536K | |
| Total Submissions: 5991 | Accepted: 2605 |
Description
You are asked to help her by calculating how many weights are required.

Input
The end of the input is indicated by a line containing three zeros separated by a space. It is not a dataset.
Output
- You can measure dmg using x many amg weights and y many bmg weights.
- The total number of weights (x + y) is the smallest among those pairs of nonnegative integers satisfying the previous condition.
- The total mass of weights (ax + by) is the smallest among those pairs of nonnegative integers satisfying the previous two conditions.
No extra characters (e.g. extra spaces) should appear in the output.
Sample Input
700 300 200
500 200 300
500 200 500
275 110 330
275 110 385
648 375 4002
3 1 10000
0 0 0
Sample Output
1 3
1 1
1 0
0 3
1 1
49 74
3333 1
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
LL extgcd(LL a,LL b,LL &x,LL &y)
{
LL d=a;
if(b!=)
{
d=extgcd(b,a%b,y,x);
y-=(a/b*x);
}
else
{
x=;
y=;
}
return d;
}
LL GCD(LL a,LL b)
{
if(b==)
{
return a;
}
return GCD(b,a%b);
}
LL a,b,d;
int main()
{
while(scanf("%lld%lld%lld",&a,&b,&d)!=EOF&&(a+b+d)!=)
{
LL x,y;
LL gcd=GCD(a,b);
a/=gcd;
b/=gcd;
d/=gcd;
extgcd(a,b,x,y);
x*=d;
y*=d; LL x1=x;
x1=(x1%b+b)%b;//ax+by=1最小正整数解
LL y1=(d-a*x1)/b;
if(y1<)y1=-y1; LL y2=y; y2=(y2%a+a)%a; //最小正整数解
LL x2=(d-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);
}
} return ;
}
Java版:
import java.util.Scanner;
class BigInt{
private long x;
public BigInt(){}
public BigInt(long x)
{
this.x = x;
}
void setValue(long x)
{
this.x = x;
}
long getValue()
{
return x;
}
}
public class Main{
Scanner in = new Scanner(System.in);
long a, b, c;
long gcd(long a, long b)
{
if(b == )
{
return a;
}
return gcd(b, a % b);
}
long extgcd(long a, long b, BigInt x, BigInt y)
{
long d = a;
if(b != )
{
d = extgcd(b, a % b, y, x);
y.setValue(y.getValue() - a / b * x.getValue());
}
else
{
x.setValue();
y.setValue();
}
return d;
}
public Main()
{
while(in.hasNext())
{
a = in.nextLong();
b = in.nextLong();
c = in.nextLong();
if(a + b + c == ) break;
long gcd = gcd(a, b);
a /= gcd;
b /= gcd;
c /= gcd;
BigInt x = new BigInt(), y = new BigInt();
extgcd(a, b, x, y);
x.setValue(c * x.getValue());
y.setValue(c * y.getValue());
long x1 = x.getValue();
long y1 = y.getValue();
x1 = (x1 % b + b) % b;
y1 = (c - x1 * a) / b;
if(y1 < ) y1 = -y1;
long x2 = x.getValue();
long y2 = y.getValue();
y2 = (y2 % a + a) % a;
x2 = (c - y2 * b) / a;
if(x2 < ) x2 = -x2;
if(x1 + y1 < x2 + y2)
{
System.out.println(x1 + " " + y1);
}
else
{
System.out.println(x2 + " " + y2);
}
}
}
public static void main(String[] args){
new Main();
}
}
POJ2142(扩展欧几里得)的更多相关文章
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)
http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...
- UVA 12169 Disgruntled Judge 枚举+扩展欧几里得
题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...
- UVA 10090 Marbles 扩展欧几里得
来源:http://www.cnblogs.com/zxhl/p/5106678.html 大致题意:给你n个球,给你两种盒子.第一种盒子每个盒子c1美元,可以恰好装n1个球:第二种盒子每个盒子c2元 ...
- POJ 1061 青蛙的约会 扩展欧几里得
扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...
- 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- poj 2142 扩展欧几里得解ax+by=c
原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...
- poj 1061 扩展欧几里得解同余方程(求最小非负整数解)
题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...
- Codeforces7C 扩展欧几里得
Line Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
随机推荐
- Mysql 分组聚合实现 over partition by 功能
mysql中没有类似oracle和postgreSQL的 OVER(PARTITION BY)功能. 那么如何在MYSQL中搞定分组聚合的查询呢 先说结论: 利用 group_concat + sub ...
- Java Override和@Override
Override : 重写. 当子类的某个方法的方法名.返回值.参数列表均与父类的方法保持一致,我们就可以说子类重写了父类的该方法. 其中需要注意: 父类中修饰符为private, static, f ...
- ZC_01_获取Class对象
1. package reflectionZ; public class TreflectionZ { public static void main(String[] args) throws Cl ...
- 第一章 Burp Suite 安装和环境配置
Burp Suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对web应用的渗透测试和攻击.在渗透测试中,我们使用Burp Suite将使得测试工作变得更 ...
- Ajax的跨域问题(包括解决方案)?
原因:js的同源策略限制,不同源会造成跨域 哪些情况会造成跨域? 子域名不同(WWW) 2.主域名不同(baidu.com) 3.端口号不同 4.IP地址和网址不同 解决方案: 使用jsonp技术,但 ...
- Sunday算法--C#版
public static int Sunday(string text, string pattern) { int i, j, m, k; i = j = 0; int tl, pl; int p ...
- DBDB的维护和管理
挂载drbd前首先需要确认当前直接的DRDB分区是primary状态,可以从"cat /proc/drdb" 命令中查询节点状态.例如:[yongsan@mfsmaster drb ...
- java jprofile
java -agentpath:/opt/jprofiler8/bin/linux-x64/libjprofilerti.so=port=8849,nowait -Xdebug -Xrunjdwp:t ...
- 广义线性模型(GLM)
一.广义线性模型概念 在讨论广义线性模型之前,先回顾一下基本线性模型,也就是线性回归. 在线性回归模型中的假设中,有两点需要提出: (1)假设因变量服从高斯分布:$Y={{\theta }^{T}}x ...
- Database项目中关于Procedure sp_refreshsqlmodule_internal的错误
最近项目中发现一怪问题,使用DB项目发布数据库时,总提示 “(110,1): SQL72014: .Net SqlClient Data Provider: Msg 1222, Level 16, S ...