virtual hust 2013.6.21 NEFU 挑战编程----数论 G - Marbles
2013-06-21 21:16
387 查看
题目:Marbles
思路: 扩展欧几里得。
由于公式套出来的答案x,y,如果是(x*c)%b的话,求的是满足条件的x最接近于0的那组解,所以根据两种box的单位运输价值来判断到底是取x越小越好还是取y越小越好
AC Code
思路: 扩展欧几里得。
由于公式套出来的答案x,y,如果是(x*c)%b的话,求的是满足条件的x最接近于0的那组解,所以根据两种box的单位运输价值来判断到底是取x越小越好还是取y越小越好
#include <cstdio> #include <algorithm> #include <cmath> #include <iostream> #include <cstring> using namespace std; long long gcd(long long a,long long b) { if(b==0) return a; return gcd(b,a%b); } long long exgcd(long long a,long long b,long long &x,long long &y) { if(b==0) { x=1; y=0; return a; } else { long long ans=exgcd(b,a%b,x,y); long long t=x; x=y; y=t-a/b*y; return ans; } } int main() { long long n,c1,c2,n1,n2; while(scanf("%lld",&n),n) { scanf("%lld%lld",&c1,&n1); scanf("%lld%lld",&c2,&n2); long long x,y; long long tmp=gcd(n1,n2); if(n%tmp!=0) { printf("failed\n"); } else { n/=tmp; n1/=tmp; n2/=tmp; exgcd(n1,n2,x,y); if(n1*c2<n2*c1) { x*=n; x%=n2; y=(n-x*n1)/n2; } else if(n1*c2==n2*c1) { if(n1<=n2) { x*=n; x%=n2; y=(n-x*n1)/n2; } else { y*=n; y%=n1; x=(n-y*n2)/n1; } } else { y*=n; y%=n1; x=(n-y*n2)/n1; } int tag=0; if(x<0) { while(x<0) x+=n2; y=(n-x*n1)/n2; if(y<0) tag=-1; } else if(y<0) { while(y<0) y+=n1; x=(n-y*n2)/n1; if(x<0) tag=-1; } if(tag==-1) printf("failed\n"); else printf("%lld %lld\n",x,y); } } return 0; }
AC Code
相关文章推荐
- virtual hust 2013.6.21 NEFU 挑战编程----数论 A - Light, more light
- virtual hust 2013.6.21 NEFU 挑战编程----数论 B - Carmichael Numbers
- virtual hust 2013.6.21 NEFU 挑战编程----数论 C - Euclid Problem
- virtual hust 2013.6.21 NEFU 挑战编程----数论 D - Factovisors
- virtual hust 2013.6.21 NEFU 挑战编程----数论 F - Smith Numbers
- virtual hust 2013.6.21 NEFU 挑战编程----数论 E - Summation of Four Primes
- virtual hust 2013.6.22 NEFU 挑战编程----数论 H - Repackaging
- virtual hust 2013.6.21 数论基础题目 G - How many zero's and how many digits ?
- virtual hust 2013.6.21 数论基础题目 H - Factoring Large Numbers
- 庞果网-在线编程挑战 幸运数 简单数论.......
- virtual hust 2013.6.20 数论基础题目 E - Uniform Generator
- UVA——10139(数论)(挑战编程题目)
- virtual hust 2013.6.20 数论基础题目 F - Pseudo-Random Numbers
- 庞果网-在线编程挑战 幸运数 简单数论.......
- virtual hust 2013.6.20 数论基础题目 A - Skew Binary
- 数论 - 挑战编程
- virtual hust 2013.6.20 数论基础题目 C - Multiplying by Rotation
- 数论 - 挑战编程
- virtual hust 2013.6.20 数论基础题目 D - Just the Facts
- virtual hust 2013.6.20 数论基础题目 B- Light, more light