前言

感谢x某q的帮助
这是它的博客(只有找本人才会解释的博客):
https://blog.csdn.net/sugar_free_mint/article/details/80755188


正题

题目链接:
http://poj.org/problem?id=2142


大意

有三种东西,重量不同,A种只能放左边;B种只能放右边;C种只有一个,两边都可以放。A和B随便放多少个都行但是C必须放,要求两边重量相等。求在满足放的东西最少,之后满足重量最小的放置方案


解题思路

首先推出公式

Ax=By+cAx=By+c
oror
By=Ax+cBy=Ax+c

然后移项得

Ax−By=cAx−By=c
oror
By−Ax=cBy−Ax=c

然后是不是又有些眼熟,没错了就是扩欧ax+by=cax+by=c。之后我们发现我们之前那个(x∗((b−a)/d)%(k/d)+(k/d))%(k/d)(x∗((b−a)/d)%(k/d)+(k/d))%(k/d)的公式如果既求x又求y的话就会不成立。

然后就场外求助用一种方法,用最小的x来求y和用最小的y来求x之后可以判断那个更优。


代码

#include<cstdio>
#include<algorithm>
using namespace std;
int x,y,a,b,c,x1,y1,x2,y2;
int gcd(int a,int b)
{if (b==0){x=1;y=0;return a;}int d=gcd(b,a%b),k=x;x=y;y=k-(a/b)*y;return d;
}
int main()
{while (true){scanf("%d%d%d",&a,&b,&c);if (a==0&&b==0&&c==0) return 0;int gcde=__gcd(a,b);a/=gcde;b/=gcde;c/=gcde;//提前除去方便些int d=gcd(a,b),g=b;x1=(x*c%b+b)%b;//求最小的xy1=(a*x1-c)/b;//算出yif (y1<0) y1=-y1;//确定是那个公式y2=(y*c%a+a)%a;//求最小yx2=(b*y2-c)/a;//算出xif (x2<0) x2=-x2;//确定公式if (x1+y1<x2+y2) printf("%d %d\n",x1,y1);else printf("%d %d\n",x2,y2);//比较方案}
}

转载于:https://www.cnblogs.com/sslwyc/p/9218505.html

POJ2142-The Balance【扩欧】相关推荐

  1. bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)

    Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意 ...

  2. jzoj1158-荒岛野人【扩欧,gcd,同余方程】

    正题 大意 有n个野人,每个野人有一个初始山洞CiCiC_i,每次向前移动距离PiPiP_i,寿命LiLiL_i,如果野人走到了最后一个山洞那么继续就好回到第一个山洞,求至少多少个山洞才可以让野人们不 ...

  3. P1082-扩欧模板同余方程【扩欧,数论】

    正题 链接: https://www.luogu.org/record/show?rid=7914999 大意 就是 ax≡1(modb)ax≡1(modb) ax≡1(modb) 给出a和b求x 解 ...

  4. SGU - 106 The equation(扩欧+细节处理)

    传送门 题目大意 给出 a x + b y + c = 0 ax+by+c=0 ax+by+c=0这一二元一次不定方程,求满足 { ( x , y ) ∣ x ∈ [ l x , r x ] , y ...

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

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

  6. P1516-青蛙的约会【扩欧,同余方程】

    #正题 链接: https://www.luogu.org/record/show?rid=7935281 ##大意 两只青蛙往相同方向绕圈,A蛙一次跳n米在x出发,B蛙一次跳m米在y出发,一圈长度L ...

  7. POJ2115-C Looooops【扩欧,同余】

    正题 链接: http://poj.org/problem?id=2115 大意 就是给出个循环 for(i=A;i!=B;i=(i+C)mod2k)for(i=A;i!=B;i=(i+C)mod2k ...

  8. (扩)欧几里得的一些见解

    a x + b y = g c d ( a , b ) g c d ( a , b ) = g c d ( b , a % b ) 首 先 证 明 上 面 这 个 柿 子 假 设 d = g c d ...

  9. 【扩展欧几里得】Bzoj 1477:青蛙的约会

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

最新文章

  1. mSystems:生物地球化学进入病毒时代-采用多样的方法研究病毒和生物地球化学循环...
  2. 获得连接对象 jdbc 20210412_204123.mp4
  3. ZZULIOJ21级新生周赛(1)——命题人:朱会东老师——2822: 探姬粉丝众多
  4. Data - 大数据生态圈
  5. Redis(二)原理以及主从复制的实现
  6. 介绍 JavaScript 中的闭包、局部变量(局部作用域)和私有变量等内容
  7. 骁龙888打开“新象限” ,专业相机和游戏机直呼不讲武德
  8. 健康计划 用户输入身高(m),体重(kg) 计算公式:BMI = 体重 / 身高^2 BMI < 18.5:过轻 18.5≤ BMI <24:正常 24 ≤ BMI <27:过重 27
  9. 《实时控制软件设计》第二个编程作业
  10. 什么是百度SEO?百度SEO优化怎么做?
  11. OpenGL 镜面反射光
  12. 赛灵思 Xilinx UG1387 - Versal ACAP 硬件、IP 和平台开发方法指南(中文版) (v2020.2)
  13. 技术美术个人笔记(一)——贴图间参数
  14. Java学习笔记之五:Nexus配置为强制从maven私服下载
  15. JDK1.8(jdk8)的下载与安装
  16. Linux防火墙操作firewall、iptable
  17. macOS pyinstaller打包python程序, subprocess无法运行
  18. 桌面计算机安全自查报告,关于计算机安全检查的自查报告
  19. 微信小程序连接oracle数据库,【微信小程序】关于微信小程序中跳转传参数与传对象的解析...
  20. 谷牛期权:铜期权波动率正当时

热门文章

  1. js如何同时打开多个信息窗口 高德地图_高德地图显示单个窗体和显示多个窗体的方法...
  2. Bit-Z转入GXS、PPS、SPHTX、EOS未到账解决方案
  3. 【译】Construction of a Plasma Chain 0x1
  4. Android系统启动-init篇
  5. html中after伪类原理,css :after伪类+content使用说明和方法
  6. python数据分析第七章实训3_《利用Python进行数据分析·第2版》第7章 数据清洗和准备7.1 处理缺失数据7.2 数据转换7.3 字符串操作7.4 总结...
  7. JZOJ 5977. 【清华2019冬令营模拟12.15】堆
  8. JZOJ 5434. 【NOIP2017提高A组集训10.30】Matrix
  9. JZOJ 5407. 【NOIP2017提高A组集训10.21】Deep
  10. oracle临时表空间大小查询,查看oracle 系统临时表空间、undo表空间、SGA和PGA大小...