POJ 2142 TheBalance 模线性方程求解
题目大意:
就是将两种砝码左右摆放,能够在物品放置在天平上时保持平衡
很容易得到 ax + by = t的模线性方程
按题目要求,希望首先满足 |x| + |y| 最小 , 如果有多种情况,再满足所有砝码质量最小,也就是a|x| + b|y|最小
x = x0 + b/g * k
y = y0 - a/g * k
这里可以通过画一个2维坐标图进行观察 x , y 对于k的直线,我假定 b > a ,初始如果 a>b就交换两者数据,记得最后答案交换回来
因为a,b为砝码重量都大于0
所以x是递增直线,y是递减直线
因为假设b > a了,所以x的上升趋势必然大于y的下降趋势
所以只有在x = 0的左右两个点是满足最小的情况的 , 用xx[2] , yy[2]记录这两个点,然后进行比较即可
/*
当然不交换a , b 也可以, 那就得在 a > b 的条件下多保存两组数据,此时是在y = 0 的左右两个点
*/
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; int ex_gcd(int a , int &x , int b , int &y)
{
if(b == ){
x = , y = ;
return a;
}
int ans = ex_gcd(b , x , a%b , y);
int t = x;
x = y , y = t - a/b*y;
return ans;
} void my_swap(int &a , int &b)
{
int t = a;
a = b , b = t;
} int my_abs(int a)
{
return a>=?a:-a;
} int main()
{
// freopen("a.in" , "r" , stdin);
int a , b , w;
while(scanf("%d%d%d" , &a , &b , &w) , a){
int x , y;
bool flag = false;
if(b < a){
my_swap(a , b);
flag = true;
} int g = ex_gcd(a , x , b , y);
int k = w/g;
x = k*x , y = k*y;
a /= g , b /= g;
int xx[] , yy[];
if(x >= ){
xx[] = x - x/b*b;
xx[] = xx[] - b;
yy[] = y + x/b*a;
yy[] = yy[] + a;
}else{
xx[] = x - x/b*b+b;
xx[] = xx[] - b;
yy[] = y + x/b*a - a;
yy[] = yy[] + a;
}
int ansx , ansy;
if(my_abs(xx[]) + my_abs(yy[]) == my_abs(xx[]) + my_abs(yy[])){
if(my_abs(xx[])*a + my_abs(yy[])*b < my_abs(xx[])*a + my_abs(yy[])*b)
ansx = my_abs(xx[]) , ansy = my_abs(yy[]);
else
ansx = my_abs(xx[]) , ansy = my_abs(yy[]);
}
else{
if(my_abs(xx[]) + my_abs(yy[]) < my_abs(xx[]) + my_abs(yy[]))
ansx = my_abs(xx[]) , ansy = my_abs(yy[]);
else
ansx = my_abs(xx[]) , ansy = my_abs(yy[]);
}
if(flag)
my_swap(ansx , ansy);
printf("%d %d\n" , ansx , ansy);
}
return ;
}
POJ 2142 TheBalance 模线性方程求解的更多相关文章
- POJ 2115 简单的模线性方程求解
简单的扩展欧几里得题 这里 2^k 不能自作聪明的用 1<<k来写 , k >= 31时就爆int了 , 即使定义为long long 也不能直接这样写 后来老老实实 for(int ...
- poj 2891 模线性方程组求解
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 8005 ...
- POJ - 2115 C Looooops(扩展欧几里德求解模线性方程(线性同余方程))
d.对于这个循环, for (variable = A; variable != B; variable += C) statement; 给出A,B,C,求在k位存储系统下的循环次数. 例如k=4时 ...
- POJ2115——C Looooops(扩展欧几里德+求解模线性方程)
C Looooops DescriptionA Compiler Mystery: We are given a C-language style for loop of type for (vari ...
- POJ 2115 C Looooops(模线性方程)
http://poj.org/problem?id=2115 题意: 给你一个变量,变量初始值a,终止值b,每循环一遍加c,问一共循环几遍终止,结果mod2^k.如果无法终止则输出FOREVER. 思 ...
- poj_2115C Looooops(模线性方程)
题目链接:http://poj.org/problem?id=2115 C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- C Looooops(扩展欧几里得+模线性方程)
http://poj.org/problem?id=2115 题意:给出A,B,C和k(k表示变量是在k位机下的无符号整数),判断循环次数,不能终止输出"FOREVER". 即转化 ...
- POJ2115 C Looooops 模线性方程(扩展欧几里得)
题意:很明显,我就不说了 分析:令n=2^k,因为A,B,C<n,所以取模以后不会变化,所以就是求(A+x*C)%n=B 转化一下就是求 C*x=B-A(%n),最小的x 令a=C,b=B-A ...
- C Looooops(扩展欧几里得求模线性方程)
http://poj.org/problem?id=2115 题意:对于C的循环(for i = A; i != B; i+=C)问在k位存储系统内循环多少次结束: 若循环有限次能结束输出次数,否则输 ...
随机推荐
- git回到没push的commit
创建: 2017/10/28 merge master以后数据库出了问题,改好以后发现view有点问题,commit以后没提交就reset了.过后才想起来怎么回去???吓成狗,索性找到了下面这个. ...
- JS中定时器的返回数值ID值
定时器会返回一个数字值id,可以由clearInterval(id)或clearTimeout(id)来实现对对应定时器的清除. setInterval()/setTimeout()BOM中的Wind ...
- url中传参数为中文的转码与解码解决方法
1.转码 中文为 “你好” var ProjectName = encodeURI(encodeURI("你好"));,如下图所示 跳转页面 window.location.h ...
- 二分搜索 POJ 2456 Aggressive cows
题目传送门 /* 二分搜索:搜索安排最近牛的距离不小于d */ #include <cstdio> #include <algorithm> #include <cmat ...
- 转:python中使用txt文本保存和读取变量
问题: 在python中需要经常有需要提前生成复杂的计算结果变量的需求减少程序计算运行时间的需求,因此这里把变量存在txt文本文件中. 解决方法: 使用两个函数解决问题,一个函数把变量保存到文本文件中 ...
- 396 Rotate Function 旋转函数
给定一个长度为 n 的整数数组 A .假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的“旋转函数” F 为:F(k) = 0 * Bk[0] + 1 * Bk[1] + ... ...
- Hive insert into directory 命令输出的文件没有列分隔符分析和解决
参考资料:http://stackoverflow.com/questions/16459790/hive-insert-overwrite-directory-command-output-is-n ...
- 设置Echarts鼠标悬浮样式
在option下 tooltip内添加以下代码: (本文在后台进行传值 也就是其中的viewstate[]) tooltip: { show: true, trigger: 'axis', //sho ...
- IntelliJ IDEA jrebel 实现热部署
前提是能够访问登陆Facebook,有Facebook的账号(我注册了一个) 点击:https://my.jrebel.com 用Facebook登陆 之后按要求填写信息 然后获取激活码 打开 id ...
- C/C++ static、extern
一.static本质作用 与static相对的关键字是auto,两者是一对.我们一般声明变量,如:int a,其实都是auto int a,只是auto省略了而已,但是static不能省略.要理解st ...