博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2142-The Balance【扩欧】
阅读量:5276 次
发布时间:2019-06-14

本文共 1087 字,大约阅读时间需要 3 分钟。

前言

感谢x某q的帮助

这是它的博客(只有找本人才会解释的博客):


正题

题目链接:


大意

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


解题思路

首先推出公式

Ax=By+cAx=By+c

oror

By=Ax+cBy=Ax+c

然后移项得

AxBy=cAx−By=c

oror

ByAx=cBy−Ax=c

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

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


代码

#include
#include
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;//求最小的x y1=(a*x1-c)/b;//算出y if (y1<0) y1=-y1;//确定是那个公式 y2=(y*c%a+a)%a;//求最小y x2=(b*y2-c)/a;//算出x if (x2<0) x2=-x2;//确定公式 if (x1+y1

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

你可能感兴趣的文章
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>
迭代器Iterator
查看>>
java易错题----静态方法的调用
查看>>
php建立MySQL数据表
查看>>
最简单的线程同步的例子
查看>>
旅途上看的电影和观后感
查看>>
Ztree异步树加载
查看>>
关于IE和火狐,谷歌,Safari对Html标签Object和Embed的支持问题
查看>>