题目大意:

就是将两种砝码左右摆放,能够在物品放置在天平上时保持平衡

很容易得到 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 模线性方程求解的更多相关文章

  1. POJ 2115 简单的模线性方程求解

    简单的扩展欧几里得题 这里 2^k 不能自作聪明的用 1<<k来写 , k >= 31时就爆int了 , 即使定义为long long 也不能直接这样写 后来老老实实 for(int ...

  2. poj 2891 模线性方程组求解

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 8005   ...

  3. POJ - 2115 C Looooops(扩展欧几里德求解模线性方程(线性同余方程))

    d.对于这个循环, for (variable = A; variable != B; variable += C) statement; 给出A,B,C,求在k位存储系统下的循环次数. 例如k=4时 ...

  4. POJ2115——C Looooops(扩展欧几里德+求解模线性方程)

    C Looooops DescriptionA Compiler Mystery: We are given a C-language style for loop of type for (vari ...

  5. POJ 2115 C Looooops(模线性方程)

    http://poj.org/problem?id=2115 题意: 给你一个变量,变量初始值a,终止值b,每循环一遍加c,问一共循环几遍终止,结果mod2^k.如果无法终止则输出FOREVER. 思 ...

  6. poj_2115C Looooops(模线性方程)

    题目链接:http://poj.org/problem?id=2115 C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  7. C Looooops(扩展欧几里得+模线性方程)

    http://poj.org/problem?id=2115 题意:给出A,B,C和k(k表示变量是在k位机下的无符号整数),判断循环次数,不能终止输出"FOREVER". 即转化 ...

  8. 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 ...

  9. C Looooops(扩展欧几里得求模线性方程)

    http://poj.org/problem?id=2115 题意:对于C的循环(for i = A; i != B; i+=C)问在k位存储系统内循环多少次结束: 若循环有限次能结束输出次数,否则输 ...

随机推荐

  1. MySQL基础 — 详细安装

    MySQL--安装 打开MySQL 5.5 安装文件开始: 点击Next 打上勾,再点击Next 点击Custom,说明如下: Typical(典型安装)        Installs the mo ...

  2. codeforces 949C - Data Center Maintenance【tarjan】

    首先转换图论模型,把某个客户一个终端的维修时间(+1)%h之后和另一个终端维修时间一样,这样的两个终端连一条有向边,表示推后一个终端就必须推后另一个 然后tarjan缩点,一个scc里的终端是要一起推 ...

  3. P4128 [SHOI2006]有色图

    传送门 数学渣渣看题解看得想死Ծ‸Ծ 首先发现这玩意儿看着很像polya定理 \[L=\frac{1}{|G|}\sum_{i\in G}m^{w(i)}\] 然而polya定理只能用来求点的置换,边 ...

  4. js angular 时间戳转换成日期格式 年月日 yyyy-MM-dd

    昨天写项目,要把时间戳转换成日期格式发给后端 我就去网上找 看到的一些都不是我想要的 索性自己就写了一个如图 下面是angular 模式 $scope.getMyDate = function(str ...

  5. 论文翻译-SELF TRAINING AUTONOMOUS DRIVING AGENT

    文献地址 链接:https://pan.baidu.com/s/1gHrpnOf1FXLp9u8OJ2-oCg 提取码:y2w6 作者 Shashank Kotyan, Danilo Vasconce ...

  6. [Qt Quick入门] 基本元素初体验

    Qt Quick作为QML语言的标准库,提供了很多基本元素和控件来帮助我们构建Qt Quick应用.这节我们简要地介绍一些Qt Quick元素,如Rectangle.Item.Text.Button. ...

  7. [转]C++常用字符串分割方法实例汇总

    本文实例汇总了C++常用字符串分割方法,分享给大家供大家参考.具体分析如下: 我们在编程的时候经常会碰到字符串分割的问题,这里总结下,也方便我们以后查询使用. 一.用strtok函数进行字符串分割 原 ...

  8. STL内存分配方式

    关于STL用的很多比如map, vector, set, queue, stack等等.很少关注它的内存分配情况,但是经常遇到比如使用map,不停的在map中插入了一些很小的对象,然后释放了一些,然后 ...

  9. 【C++】智能指针简述(六):智能指针总结及补充

    本文我们主要来总结一下前文介绍过的智能指针相关原理及实现,顺便补充一下前文未提到的shared_ptr删除器部分的内容. 总结: 1.智能指针,通过RAII机制,构造对象时完成资源的初始化,析构对象时 ...

  10. 【sqli-labs】 对于less34 less36的宽字节注入的一点深入

    1.AddSlashes() 首先来观察一下是如何通过构造吃掉转义字符的 先将less 34的网页编码换成gbk 加上一些输出 echo "Before addslashes(): &quo ...