链接:https://ac.nowcoder.com/acm/contest/635/H
来源:牛客网

题目描述

艾兰岛和沃夫岛的时间算法很不一样,它们都拥有它们自己的魔法大时钟。以我们的时间来看艾兰岛的大时钟起鸣在b, b+a, b+2a, b+3a,… ,(a,b均为正整数)并且沃夫岛的大时钟起鸣在d, d+c, d+2c, d+3c,….(c,d均为正整数)因为计时的方法不同,两边经常打仗,但可能有某些时间点两边的大时钟同时起鸣。我们称这样的时间点为和平点。求第一个和平点。(如果没有这样的时间点,输出-1)

输入描述:

第一行输入两个整数a,b ( 1< a,b < 5*108)

第二行输入两个整数c,d ( 1< c,d < 5*108)

输出描述:

第一个和平点所表示的时间(如果没有这样的时间点,输出-1)
示例1

输入

复制

20 2
9 19

输出

复制

82

示例2

输入

2 1
16 12

输出

-1

思路:保证 ax+b=cy+d 最小,等式转化成 ax-cy=d-b(x>0,y>0),即ax+cy=d-b(x>0,y<0),为了使方程具有统一性,我们要确保d-b>0,或者d-b<0(这里是d-b>0)显然是扩展欧几里得的应用,我们用扩展欧几里得算出 ax+cy=gcd(a,c)

根据扩展欧几里得性质,当d-b整除gcd才有解。再乘以(b-d)/gcd(a,c),就是ax+cy=d-b的一个解。因为我们固定d-b>0,所以我们要先求得最大负数的一个y解,为什么不是算x解。

因为 ax+b=d-cy(d>b,y<0),如果计算最小正数解是不能保证d-cy等于ax+b的,有可能d-cy达不到ax+b那么小,因为d>b,  -cy>0举例: a=1,x=1,b=2,d=4,  a*x+b=3<d-cy>4,所以是不行的。就是 如果算x的最小正解 ax+b太小  可能使   cy+d  y为负数(就不符合题意了)所以求到最大负数y解即可,保证有解。代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;ll exgcd(ll a,ll b,ll &x,ll &y)
{if(b==0){x=1;y=0;return a;}int ans=exgcd(b,a%b,x,y);int temp=x;x=y;y=temp-(a/b)*y;return ans;
}
int main()
{ll a,b,c,d,x,y;cin>>a>>b>>c>>d;if(b>d)//保证d>b
    {swap(a,c);swap(b,d);}ll g=exgcd(a,c,x,y);if((d-b)%g!=0)//d-b整除gcd才有解 cout<<-1<<endl;else{x=x*(d-b)/g;y=y*(d-b)/g;y%=(a/g);if(y>0)//求是最大负数y解 y-=a/g;cout<<d-c*y<<endl;}return 0;
}

转载于:https://www.cnblogs.com/xiongtao/p/10702043.html

H-大时钟(扩展欧几里得)相关推荐

  1. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  2. 欧几里得+扩展欧几里得+RSA

    欧几里得算法: 就是辗转相除法,gcd(a,b)=gcd(b,a%b), 实现简单,用途广泛,模板如下: int gcd(int a,int b)//或者都取 long long {return b! ...

  3. “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)

    题目链接 题目描述: 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对 ...

  4. Strange Optimization(扩展欧几里得)

    Strange Optimization Accepted : 67   Submit : 289 Time Limit : 1000 MS   Memory Limit : 65536 KB Str ...

  5. 逆元+费马小定理+扩展欧几里得

    逆元:(即是逆元素)逆元素是指一个可以取消另一给定元素运算的元素. 在一个代数系统(S,*)中,存在单位元素e,如果对S内的元素a存在a^-1 * a = e,则将 a^-1称为a 的左逆元. 同理若 ...

  6. URAL1204. Idempotents(扩展欧几里得)

    1204 大体推推 会出来这个式子 x(x-1) = k*n;n = p*q ;x(x-1)%(p*q)==0; 因为p,q都为素数 那也就是说x和x-1中必定包含这两个数 而且一个里面只能有一个 不 ...

  7. Romantic 扩展欧几里得

    romantic 扩展欧几里得 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll exgcd(ll ...

  8. 【笔记】 欧几里得(扩展欧几里得)

    欧几里得 本质:利用辗转相减法求最大公约数,即 gcd(a, b). 数学表达: 设 a > b ,则                          gcd(a, b) = gcd(a-b, ...

  9. 欧几里得算法扩展欧几里得

    本文包括: 1.几里德算法 递归实现 2.扩展欧几里德算法 递归实现 -实际上就是把别人总结的,我认为有助于自己理解的内容copy过来,再加上几句自己的理解. 欧几里得算法 欧几里德算法又称辗转相除法 ...

  10. 扩展欧几里得求多组解CodeForces - 1244C

    扩展欧几里得求多组解 扩展欧几里得可以求得满足ax+by = c的一组解(这里c%gcd(a,b)要等于0):假如求得的解为(x0 , y0),G = gcd(a , b),这时我们可以发现(x0 + ...

最新文章

  1. linux out of memory分析(OOM)
  2. oracle sequence用法
  3. 嵌入式系统中对汉字的处理
  4. SetupDiGetClassDevs函数详解
  5. 制作Python的安装模块
  6. 1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式
  7. Careless Me
  8. weekendplan
  9. asp.net基础知识
  10. 计算机英语短文互译,中英文互译的英语短文
  11. 操作系统原理 —— 操作系统概述
  12. 改caffe 里面的contrsitve_loss
  13. 序列化---fastjson使用
  14. 在mybatis里面取别名
  15. mysql报错:Host ***.***.***.*** is not allowed to connect to this MySQL server
  16. 前端对页面中的 checked 选中状态的展示
  17. 作为一位爬虫,说说代理IP哪家强?
  18. 汽车之家精选论坛图片下载
  19. 举个栗子!Tableau 技巧(158):如何实现双域的服务器单点登录
  20. php程序克隆,php克隆 - freedom - OSCHINA - 中文开源技术交流社区

热门文章

  1. matlab条形图标注数据,matlab条形图怎样标注
  2. RPA之家视频讲解RPA-3
  3. 一句话理解:过拟合和欠拟合
  4. 鸡蛋,必须放在合适的篮子里
  5. 我的世界玩服务器虚拟内存高崩,服务端崩溃 - 崩溃解答 - MC百科社群 - MC百科|最大的Minecraft中文MOD百科...
  6. springboot2 集成支付宝支付
  7. linux没有cpufreq目录,Linux系统的Cpufreq
  8. java-net-php-python-java门诊信息管理系统计算机毕业设计程序
  9. Handler同步屏障
  10. MLO/uboot-spl.bin和uboot.img/uboot.bin