补一篇以前的扩展欧几里得的题,发现以前写错了竟然也过了,可能数据水???

这个题还是很有意思的,和队友吵了两天,一边吵一边发现问题???

L. Knights without Fear and Reproach

http://codeforces.com/gym/100812/problem/L

time limit per test

2.0 s

memory limit per test

256 MB

input

standard input

output

standard output

They were all dead. The final lunge was an exclamation mark to everything that had led to this point. I wiped my sword from the blood of Dragon and sheathed it. And then it was all over. Devastated, I came out of the empty castle and wandered somewhere along a dirt road. But before I could think about what I would do now, I heard a piercing scream from behind: "Stop right now! Drop a sword and raise your hands up!". They were knights. Only knights scream like that before making a hit. If they had been bandits I would be already dead.

I turned back and saw two figures in heavy armor rushing towards me. They were Lancelot and Percival — two knights of the Round Table, known for their fast reprisal over renegades like me. In the Kingdom they were called the Cleaners. As for me, not the most suitable name: they usually left a lot of dirt.

I almost instantly read their technique. Each of them was preparing for some time, then hit instantly, then was preparing again for the same time, then hit again, and so on, while their victim was not fallen. Lancelot spent n seconds to prepare, and Percival — m seconds. I was too tired and could parry a hit only if the previous one was done more than a second ago, and there were no powers to counter-attack at all. It was the sense that Lady Luck was really a hooker, and you were fresh out of cash. The knights knew their job and the first hit I wouldn't be able to parry would finish me off. My story wouldn't have a happy end.

Input

The only line contains two integers separated by a space: n and m (1 ≤ n, m ≤ 2·109) — the intervals of time in seconds between hits of Lancelot and Percival correspondingly.

Output

Output a single integer — the number of seconds from the beginning of the fight when the protagonist will be killed.

Examples
input

Copy
9 6
output
18
input

Copy
7 11
output
22
 
 
这个题的意思就是问什么时候两个数的距离最小为1或者0,然后输出数相比较而言大的那个。
这个题一定是有解的,就是a的倍数是b,b的倍数是a。最小距离是0,但是要找最优解。
所以扩展欧几里得就很OK。
如果a和b的最大公约数不是1,那么答案就是他们的最小公倍数。那么a和b的最小距离就是0的时候,直接就是ans=a*b/gcd(a,b);
如果a和b的最大公约数是1,那么利用扩展欧几里得解方程a*x+b*y=1;
求出来的x和y就是a和b对应的系数。但是这里求出来的并不是最优解,因为公式满足a*(x+k*b/gcd(a,b))+b*(y-k*a/gcd(a,b))=1;
这个肯定是成立的,因为gcd(a,b)=1,所以直接将求出来的x和y进行对b和a的取模就可以。
为了避免求出来负值,所以先加上一个b或者a然后取模就可以了。
我一开始写的时候,求出来x和y就直接输出了,并没有考虑取模,但是也水过去了。
关于扩展欧几里得,以前写过一篇水的博客,传送门:我是智障
 
代码:
 //L - Knights without Fear and Reproach-扩展欧几里得
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
ll exgcd(ll a,ll b,ll &x,ll &y){ //扩展欧几里得
if(b==){
x=;y=;
return a;
}
ll r=exgcd(b,a%b,x,y);
ll t=y;
y=x-(a/b)*y;
x=t;
return r;
} int main(){
ll n,m,ans;
scanf("%lld%lld",&n,&m);
ll x,y;
ll c=exgcd(n,m,x,y);
if(n==&&m==)ans=;
else if(n==||m==)ans=; //特判
else{
if(c!=)
ans=n*m/c;
else{
if(n*m/c>max(abs(x*n),abs(y*m))){
ans=max(abs(x*n),abs(y*m));
if(ans==abs(x*n))ans=abs(((x+m)%m)*n);
else ans=abs(((y+n)%n)*m);
}
else
ans=n*m/c;
}
}
printf("%lld\n",ans);
}

溜了,去写别的题了。

 

最新文章

  1. shiro在springmvc里面的集成使用【转】
  2. js实现一个简单计算器
  3. C语言编译过程
  4. C# 代码编程规范
  5. 前向否定界定符 python正则表达式不匹配某个字符串 以及无捕获组和命名组(转)
  6. forever start Error: Cannot find module &#39;./daemon.v0.10.26&#39;
  7. PowerShell入门(一):PowerShell能干什么?
  8. C#调用存储过程实现分页(个人代码笔记)
  9. 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)(转)
  10. ionic/cordvoa 修改platform文件夹里的文件,build会覆盖问题
  11. Ubuntu下errno值
  12. CodeForces628-B.New Skateboard
  13. [学习笔记]Java代码中各种类型变量的内存分配机制
  14. CRM4.0 上传附件大小限制
  15. Java四中引用
  16. 【LOJ】#2567. 「APIO2016」划艇
  17. 001.RAID简介
  18. awk 脚本同时解析多个文件
  19. [py]多态的理解
  20. 修改Tomcat端口

热门文章

  1. openstack源
  2. V4L2学习(五)VIVI虚拟摄像头驱动
  3. 3224: Tyvj 1728 普通平衡树(finger tree)
  4. 33、secret
  5. [oldboy-django][3作业汇总]登录,注册最终版
  6. [oldboy-django][2深入django]django模板使用函数
  7. SQL SERVER存储引擎——04.数据
  8. Mysql,phpmyadmin密码忘了怎么办
  9. 【bzoj1146】[CTSC2008]网络管理Network 倍增LCA+dfs序+树状数组+主席树
  10. libcmt.lib和msvcrt.lib冲突,原因和解决方法