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

时间:2022-09-19 08:28:21

题目链接:https://cn.vjudge.net/contest/276376#problem/E

题目大意:给你n,m,k,n,m代表当前由于无限个质量为n,m的砝码。然后当前有一个秤,你可以通过秤的左边和右边的砝码种类和数目,能够测出m的质量,然后问你使用两个砝码总和最少的情况。

具体思路:和前面几个题的思路一样,列出等式Ax+By=C,然后再通过扩展欧几里得去解这个式子,当前一共有两组解,一个是通过x,解出y。另一个是通过y,解出x。我们就取这两种的总和最小的情况就可以了。注意x和y都应该是非负数,所以当第一种情况解出的y是负值的时候,y应该取反,第二种情况类似。

AC代码:

 #include<iostream>
#include<stack>
#include<cmath>
#include<queue>
#include<stdio.h>
#include<algorithm>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 1e5+;
ll xo,yo;
ll exgcd(ll a,ll b)
{
if(b==)
{
xo=;
yo=;
return a;
}
ll gcd=exgcd(b,a%b);
ll tmp=yo;
yo=xo-a/b*yo;
xo=tmp;
return gcd;
}
int main()
{
ll a,b,c;
while(~scanf("%lld %lld %lld",&a,&b,&c)&&(a+b+c))
{
ll t=exgcd(a,b);
ll t1=b/t;
if(t1<)
t1-=t1;
ll x1=(c*xo/t%t1+t1)%t1;
ll y1=(c-a*x1)/b;
if(y1<)y1=-y1;
ll minn=x1+y1;
t1=a/t;
ll y2=(yo*c/t%t1+t1)%t1;
ll x2=(c-b*y2)/a;
if(x2<)x2=-x2;
if(minn>x2+y2)x1=x2,y1=y2;
printf("%lld %lld\n",x1,y1);
}
return ;
}

扩展欧几里得(E - The Balance POJ - 2142 )的更多相关文章

  1. 扩展欧几里得求解同余方程(poj 1061)

    设方程 ax + by = c , 若 gcd(a,b) 是 c的因子(记作gcd(a,b)|c)则方程有解,反之无解. 其中x0,y0是方程的一组特解 , d = gcd(a,b), poj1061 ...

  2. POJ - 2142 The Balance(扩展欧几里得求解不定方程)

    d.用2种砝码,质量分别为a和b,称出质量为d的物品.求所用的砝码总数量最小(x+y最小),并且总质量最小(ax+by最小). s.扩展欧几里得求解不定方程. 设ax+by=d. 题意说不定方程一定有 ...

  3. POJ 2142 - The Balance &lbrack; 扩展欧几里得 &rsqb;

    题意: 给定 a b n找到满足ax+by=n 的x,y 令|x|+|y|最小(等时令a|x|+b|y|最小) 分析: 算法一定是扩展欧几里得. 最小的时候一定是 x 是最小正值 或者 y 是最小正值 ...

  4. Intel Code Challenge Final Round &lpar;Div&period; 1 &plus; Div&period; 2&comma; Combined&rpar; C&period;Ray Tracing &lpar;模拟或扩展欧几里得&rpar;

    http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...

  5. UVA 12169 Disgruntled Judge 枚举&plus;扩展欧几里得

    题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...

  6. UVA 10090 Marbles 扩展欧几里得

    来源:http://www.cnblogs.com/zxhl/p/5106678.html 大致题意:给你n个球,给你两种盒子.第一种盒子每个盒子c1美元,可以恰好装n1个球:第二种盒子每个盒子c2元 ...

  7. POJ 1061 青蛙的约会 扩展欧几里得

    扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...

  8. 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】

    Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...

  9. poj 2891 扩展欧几里得迭代解同余方程组

    Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...

随机推荐

  1. &lbrack;ASP&period;NET MVC 小牛之路&rsqb;06 - 使用 Entity Framework

    在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码中手工造的数据.本文将演示如何在ASP.NET MVC中使用E ...

  2. WordPress WP-Realty插件&OpenCurlyQuote;listing&lowbar;id’参数SQL注入漏洞

    漏洞名称: WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞 CNNVD编号: CNNVD-201310-499 发布时间: 2013-10-23 更新时间: 20 ...

  3. The Glorious Karlutka River &equals;&rpar;

    sgu438:http://acm.sgu.ru/problem.php?contest=0&problem=438 题意:有一条东西向流淌的河,宽为 W,河中有 N 块石头,每块石头的坐标( ...

  4. 得到指定进程PID

    //#include "targetver.h" #include "stdio.h" #include <windows.h> #include ...

  5. hdu 5517 Triple&lpar;二维树状数组&rpar;

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  6. python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式

    一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...

  7. 28&period; 表单css样式定义格式

    form>table>tbody>tr>td{padding:5px;font-size:14px;font-family:"Microsoft YaHei&quot ...

  8. 【BZOJ4804】欧拉心算

    Description 给定数字\(n\)(\(n\le 10^7\)),求: \[ \sum_{i=1}^n\sum_{j=1}^n\varphi(\gcd(i,j)) \] ​ 多组数据输入,数据 ...

  9. 《SPARK&sol;TACHYON&colon;基于内存的分布式存储系统》-史鸣飞(英特尔亚太研发有限公司大数据软件部工程师)

    史鸣飞:大家好,我是叫史鸣飞,来自英特尔公司,接下来我向大家介绍一下Tachyon.我事先想了解一下大家有没有听说过Tachyon,或者是对Tachyon有没有一些了解?对Spark呢? 首先做一个介 ...

  10. C语言数组的概念

    在<C语言数据输出大汇总以及轻量进阶>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include <std ...