关于ax+by=c的解x,y的min(|x|+|y|)值问题
首先我们移动一下项,并强行让a>b。
然后我们可以画出这样一个图像
我们发现,在线段l与x轴交点处的下方,x,y的绝度值是递增的,所以我们不考虑那个最小点在下端。
之后我们发现在点的上端,因为斜率小于-1,x的减少远没有y加的快,所以我们知道极点在l与x轴的交汇处。
但是该点不一定是整点啊。。
所以我们只要找到它上面和下面最近的两个整点即可。
所以我们求ax+by=c最小的正整数解y即可,之后调出x,然后y减去a,再求x,比较两次min(|x|+|y|),就可以得出答案了。
当然如果第一次求出来的y=0,答案就是它了。。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> #define ll long long using namespace std; ll gcd(ll a,ll b)
{
return b==?a:gcd(b,a%b);
} ll x,y; void exgcd(ll n,ll m)
{
if(m==){x=,y=;return;}
exgcd(m,n%m);ll t=x;
x=y;y=t-n/m*y;
} int main()
{
ll a,b,d;
scanf("%lld%lld",&a,&b);
ll gd=gcd(a,b);
a/=gd,b/=gd;
exgcd(a,b);
while(~scanf("%lld",&d))
{
if(d%gd){printf("BeiJu!\n");continue;}
d/=gd;
ll ans1=(y*d%a+a)%a,ans;
ans=abs(ans1)+abs((d-ans1*b)/a);
if(!ans1){printf("%lld\n",ans);return ;}
ans1-=a;
ans=min(ans,abs(ans1)+abs((d-ans1*b)/a));
printf("%lld\n",ans);
}
return ;
}
代码略丑。。题目给出a,b,给出一堆c,求min(|x|+|y|).
关于ax+by=c的解x,y的min(|x|+|y|)值问题的更多相关文章
- 青蛙的约会 扩展欧几里得 方程ax+by=c的整数解 一个跑道长为周长为L米,两只青蛙初始位置为x,y;(x!=y,同时逆时针运动,每一次运动分别为m,n米;问第几次运动后相遇,即在同一位置。
/** 题目:青蛙的约会 链接:https://vjudge.net/contest/154246#problem/R 题意:一个跑道长为周长为L米,两只青蛙初始位置为x,y:(x!=y,同时逆时针运 ...
- Solve Equation gcd(x,y)=gcd(x+y,lcm(x,y)) gcd(x,y)=1 => gcd(x*y,x+y)=1
/** 题目:Solve Equation 链接:http://acm.hnust.edu.cn/JudgeOnline/problem.php?id=1643 //最终来源neu oj 2014新生 ...
- yum -y upgrade 和 yum -y update 区别
分别测试yum -y upgrade和yum -y update 升级前 系统版本: CentOS5.5 内核版本: 2.6.18-194.el5 升级前做过简单配置文件修改 yum -y upgra ...
- LightOj 1215 - Finding LCM(求LCM(x, y)=L中的 y )
题目链接:http://lightoj.com/volume_showproblem.php?problem=1215 题意:已知三个数a b c 的最小公倍数是 L ,现在告诉你 a b L 求最 ...
- linux内核中的min(x, y)和max(x, y)宏定义
/linux/include/linux/kernel.h中有min(x, y)和max(x, y)的定义如下: #define min(x, y) ({ \ typeof(x) _min1 = x; ...
- [再寄小读者之数学篇](2014-11-19 $\sin(x+y)=\sin x\cos y+\cos x\sin y$)
$$\bex \sin(x+y)=\sin x\cos y+\cos x\sin y. \eex$$ Ref. [Proof Without Words: Sine Sum Identity, The ...
- Java中x+=y和x=x+y两种实现的区别
先看下边两段代码,各有什么错? 例一: short s1 = 1; s1 = s1 + 1; 例二: short s1 = 1; s1 += 1; 第一段代码无法通过编译,由于 s1+1 在运算时会自 ...
- B - 小Y上学记——小Y的玩偶
B - 小Y上学记——小Y的玩偶 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- y=x^2 vs y=x^(1/2)
[y=x^2 vs y=x^(1/2)] y=x^2,基础函数,废话不多说. y=x^(1/2),指数变成了上式的倒数.x^(1/2)即是,√x.但函数图像会是什么样呢?可以把y=x^(1/2),转变 ...
随机推荐
- ActiveMQ(5.10.0) - hello world
Sending a JMS message public class MyMessageProducer { ... // 创建连接工厂实例 ConnectionFactory connFactory ...
- POi写入大批量数据
直接贴代码: package jp.co.misumi.mdm.batch.common.jobrunner; import java.io.File; import java.io.FileNotF ...
- HTML5新特性之WebNotifications
Web Notifications是HTML5中一个令人欣喜的新特性,它支持开发者配置和显示桌面通知,为用户提供更好的体验,最令人称赞的是,即使用户忙于其他工作时也可以收到来自页面的消息通知,例如一个 ...
- 剑指offer_快速查找递增二维数组中是否存在目标
[编程题]二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- Android的SharedPreferences实用技巧
转自:http://blog.csdn.net/jingfeizhu/article/details/10017779 SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XM ...
- C#核心语法
目录 1. 特殊的数据成员........................................................................... 1 2. 数组(arr ...
- blazeds使用remote访问
欢迎交流转载,请注明出处:http://www.cnblogs.com/shizhongtao/p/3487128.html 1.配置及说明 jar包说明 从官方上下的Blazeds中,默认的配置有 ...
- LibCurl笔记四
1,curl设置fiddler代理curl_easy_setopt(m_easyHandle, CURLOPT_PROXY, "127.0.0.1:8888"); 2,
- java web中cookie的永久创建与撤销
一.首先是创建cookie 当在数据库中查找知道所输入的用户名和密码正确之后,就开始创建: String cb=request.getParameter("cb");//cb就是登 ...
- Sicily 1068欢迎提出优化方案
1608. Digit Counting 限制条件 时间限制: 1 秒, 内存限制: 32 兆 题目描述 Trung is bored with his mathematics homeworks. ...