CF787A:The Monster(扩展欧几里得)
来源:互联网 发布:免费域名后缀 编辑:程序博客网 时间:2024/06/05 04:50
题意:给出a,b,c,d四个数,两个人在尖叫,第一个人在b,b+a,b+2a,b+3a......时刻尖叫,第二个人在d,d+c,d+2c,d+3c......时刻尖叫,问他们第一次在相同时刻尖叫是什么时候。
思路:设第一个人x,第二个y,显然有b+ax = d+cy,ax-cy=d-b,求最小的x解即可,由于y又要保证为非负数,x要一直增加到y为非负数。
# include <bits/stdc++.h>using namespace std;int a, b, c, d, x, y, gd;int ex_gcd(int a, int b){ if(b == 0) { x = 1; y = 0; return a; } gd = ex_gcd(b, a%b); int t = x; x = y; y = t-(a/b)*y; return gd;}int main(){ int A, B, C, D, t, tmp=0; scanf("%d%d%d%d",&A,&B,&C,&D); a = A; b = -C; c = D-B; gd = ex_gcd(a, b); if(c % gd != 0) return 0*puts("-1"); x = x*c/gd; y = y*c/gd; int k = b/gd; x = (x%k+k)%k; if(x < 0) x += abs(k); /* while((c - a*x)/b < 0) x += abs(k); 下面的东西可以用这个暴力循环代替。 */ if((c - a*x)/b < 0) { tmp = a*x-c; k = abs(k); t = (tmp%(a*k)+(a*k))%(a*k); if(t < 0) t += a*k; tmp = (t-tmp)/(a*k); } printf("%d\n",B+A*(x+k*tmp)); return 0;}
阅读全文
0 0
- CF787A:The Monster(扩展欧几里得)
- CodeForces 787A A. The Monster(扩展欧几里得)
- codeforces 787A the monster(扩展欧几里得做法+暴力做法)
- The Balance(扩展欧几里得算法)
- SGU - 106 - The equation (扩展欧几里得)
- POJ 2142The Balance(扩展欧几里得)
- POJ-2142-The Balance(扩展欧几里得)
- SGU 106 The equation(扩展欧几里得)
- poj2142 The Balance(扩展欧几里得算法)
- POJ2142 The Balance(扩展欧几里得算法)
- The Balance(扩展欧几里得模板题)
- The equation----扩展欧几里得
- The Balance 扩展欧几里得
- 欧几里得+扩展欧几里得(理解)
- Kill the monster(深搜)
- poj2142(THE BALANCE)(扩展欧几里得入门题)
- HDU4596Yet another end of the world(扩展欧几里得)
- The Monster
- JavaWeb
- 关于给springboot添加定时器的两种方式
- strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、区别和效率
- 怎么样提高手机网站的用户浏览体验
- 小艾笔记——JNI开发的问题总结
- CF787A:The Monster(扩展欧几里得)
- Exception in thread "main" java.lang.Error: Unresolved compilation problems:
- android studio Terminal windows 下无法使用的问题
- 密集匹配之置信度传播BP
- 嵌入式linux FM25L256的驱动(应用层)程序
- 功能: 页面强制关闭方法 (学习日记 2017-05-27)
- 跟随你的用户(Follow Your User)
- Ubuntu亮度
- linux 用户登录查看命令