poj 2412 The Balance 【exgcd】By cellur925
一遇到数学就卡住,我这是怎么肥4...(或许到图论会愉悦吧,逃)
Description
* 给出两种重量为的 A, B 的砝码,给出一种使用最少的砝码的方
式,称出重量 C。
我们可以比较容易地列出方程$Ax+By=C$.之后来一发exgcd搞,求出方程的一组特解。平时我们求的往往是最小解,但这次它却要求两解之和最小。我们要做特殊的变形。
首先我们应该知道方程的通解:(约定:设x0,y0为一组特解,t为任意整数,设a>b(不行再交换))
那么有 $x=x0+b/gcd*t$
$y=y0-a/gcd*t$
而本题中,我们的答案就是|x|+|y|的最小值。
平时那种加模数再取膜的方法行不通了,我们从数学的角度分析这个函数,x是单调递增,而y是单调递减。因为a>b,所以减的更快。所以我们可以推出,当$y0-a/gcd*t=0$时函数有最小值(具体我也布吉岛啊qwq我好菜)
可得$t=y0*gcd/a$
所以我们把答案约束在了一个范围,即[t-1,t+1],枚举取最值即可。
不过要注意的是,我们开始约定了a>b,当a<b时我们进行了交换,但是输出的时候,我们需要换过来。(错了几次的原因)
Code
#include<algorithm>
#include<cstdio> using namespace std;
typedef long long ll; ll a,b,c,x,y; ll exgcd(ll aa,ll bb,ll &xx,ll &yy)
{
if(bb==)
{
xx=;yy=;
return aa;
}
ll d=exgcd(bb,aa%bb,xx,yy);
ll z=xx;xx=yy;yy=z-yy*(aa/bb);
return d;
} ll sabs(ll u)
{
if(u>) return u;
else return -u;
} int main()
{
while(scanf("%lld%lld%lld",&a,&b,&c)!=EOF&&a!=)
{
x=,y=;
bool flag=;
if(a<b) swap(a,b),flag=;
ll gong=exgcd(a,b,x,y);
x=x*(c/gong);y=y*(c/gong);
ll t=y*gong/a;
ll ans=,rx=,ry=;
for(int i=t-;i<=t+;i++)
{
ll tmp=sabs(x+b/gong*i)+sabs(y-a/gong*i);
if(tmp<ans) ans=tmp,rx=sabs(x+b/gong*i),ry=sabs(y-a/gong*i);
}
if(!flag)printf("%lld %lld\n",rx,ry);
else printf("%lld %lld\n",ry,rx);
}
return ;
}
poj 2412 The Balance 【exgcd】By cellur925的更多相关文章
- 图论常用算法之一 POJ图论题集【转载】
POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...
- POJ 3280 Cheapest Palindrome【DP】
题意:对一个字符串进行插入删除等操作使其变成一个回文串,但是对于每个字符的操作消耗是不同的.求最小消耗. 思路: 我们定义dp [ i ] [ j ] 为区间 i 到 j 变成回文的最小代价.那么对于 ...
- 【exgcd】卡片
卡片 题目描述 你有一叠标号为1到n的卡片.你有一种操作,可以重排列这些卡片,操作如下:1.将卡片分为前半部分和后半部分.2.依次从后半部分,前半部分中各取一张卡片,放到新的序列中.例如,对卡片序列( ...
- POJ 2142 The Balance【扩展欧几里德】
题意:有两种类型的砝码,每种的砝码质量a和b给你,现在要求称出质量为c的物品,要求a的数量x和b的数量y最小,以及x+y的值最小. 用扩展欧几里德求ax+by=c,求出ax+by=1的一组通解,求出当 ...
- POJ 1837 Balance 【DP】
题意:给出一个天平,给出c个钩子,及c个钩子的位置pos[i],给出g个砝码,g个砝码的质量w[i],问当挂上所有的砝码的时候,使得天平平衡的方案数, 用dp[i][j]表示挂了前i个砝码时,平衡点为 ...
- POJ 2142 The Balance(exgcd)
嗯... 题目链接:http://poj.org/problem?id=2142 AC代码: #include<cstdio> #include<iostream> using ...
- POJ 3669 Meteor Shower【BFS】
POJ 3669 去看流星雨,不料流星掉下来会砸毁上下左右中五个点.每个流星掉下的位置和时间都不同,求能否活命,如果能活命,最短的逃跑时间是多少? 思路:对流星雨排序,然后将地图的每个点的值设为该点最 ...
- poj 3258 River Hopscotch 【二分】
题目真是不好读,大意例如以下(知道题意就非常好解了) 大致题意: 一条河长度为 L,河的起点(Start)和终点(End)分别有2块石头,S到E的距离就是L. 河中有n块石头,每块石头到S都有唯一的距 ...
- POJ 2393 Yogurt factory【贪心】
POJ 2393 题意: 每周可以生产牛奶,每周生产的价格为Ci,每周需要上交的牛奶量Yi,你可以选择本周生产牛奶,也可选择提前几周生产出存储在仓库中(仓库无限大,而且保质期不考虑),每一周存仓库牛奶 ...
随机推荐
- unknownhostexception错误解决方案
关于java.net.UnknownHostException大家也许都比较熟悉,今天我来整理一下关于java.net.UnknownHostException的各种处理办法: 1.在Android项 ...
- 让Quality Center走下神坛--测试管理工具大PK(转)
让Quality Center走下神坛--测试管理工具QC/ALM 和 RQM.Jira.TP.SCTM大PK 在写完了<让QTP走下神坛>之后,现在来谈谈测试管理工具,献给所有正在或打算 ...
- Go语言测试代码
第一次学go语言,测试代码 package main import "fmt" var age int; const sex = 0 func init() { fmt.Print ...
- 20170225-ALV tree 显示
1.写程序, 2.话屏幕9000,CALL SCREEN 9000.(双击屏幕进去画个容器就ok,+OK_CODE,+去掉注释) 3.处理好ALV 的PBO 初始化,处理用户事件PAO,user co ...
- spring cloud 配置纲要Properties
名称 默认 描述 encrypt.fail-on-error true 标记说,如果存在加密或解密错误,进程将失败. encrypt.key 对称密钥.作为一个更强大的替代方案,考虑使用密钥库. ...
- POJ1459 Power Network —— 最大流
题目链接:https://vjudge.net/problem/POJ-1459 Power Network Time Limit: 2000MS Memory Limit: 32768K Tot ...
- 解决virtualbox安装增强工具失败的问题
virtualbox有个增强工具,安装之后用户体验是非常爽的.但是有些时候在安装增强工具会遇到一些小问题,无非是没有安装gcc,make之类的编译工具或是需要安装kernel*.而我遇到的问题在做了这 ...
- codeforces 460B Little Dima and Equation 解题报告
题目链接:http://codeforces.com/problemset/problem/460/B 题目意思:给出a, b, c三个数,要你找出所有在 1 ≤ x ≤ 1e9 范围内满足 x = ...
- silverlight 图片引入代码
private void comboBox2_SelectionChanged(object sender, SelectionChangedEventArgs e) { string str = t ...
- silverlight中 ComboBox绑定数据库,并获取当前选定值
silverlight中 ComboBox绑定数据库,并获取当前选定值 在silverlight中 用combobox下拉菜单绑定数据库的方法和用DataGrid绑定数据库的方法类似. page.xa ...