日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ2142-The Balance【扩欧】

發布時間:2025/3/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ2142-The Balance【扩欧】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

感謝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【扩欧】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。