poj1061(扩展欧基里德定理)
2024-09-05 15:50:35
题目链接:https://vjudge.net/problem/POJ-1061
题意:在一个首位相接的坐标轴上,A、B开始时分别位于X,Y处,每个单位时间向右移动m,n米,问是否能相遇,坐标轴长L。
思路:与poj2115几乎一样,扩展欧基里德模板题。题意即X+m*x=Y+n*x (mod L),x为最短相遇时间,转换后:(m-n)*x+L*y=Y-X (mod L),令a=m-n,b=L,c=Y-X,可通过扩展欧基里德定理计算出a*x+b*y=gcd(a,b),令d=gcd(a,b)。则原题有解等价与d整除c,且解为 ((c/d*x)%tmp+tmp)%tmp,tmp=abs(b/d),因为a可能小于0,所以计算出来的c也可能小于0,所以tmp要取绝对值。
AC代码:
#include<cstdio>
using namespace std;
typedef long long LL; LL X,Y,m,n,L; void ex_gcd(LL a,LL b,LL &x,LL &y,LL &d){
if(!b) x=,y=,d=a;
else{ex_gcd(b,a%b,y,x,d);y-=x*(a/b);}
} int main(){
scanf("%lld%lld%lld%lld%lld",&X,&Y,&m,&n,&L);
LL a=m-n,b=L,c=Y-X,x,y,d;
ex_gcd(a,b,x,y,d);
LL tmp=b/d;
if(tmp<) tmp=-tmp;
if(c%d==)
printf("%lld\n",((c/d*x)%tmp+tmp)%tmp);
else
printf("Impossible\n");
return ;
}
最新文章
- Windows Server 2012 在桌面上显示”我的电脑”图标
- AJAX格式
- GitLab安装手记
- C++ 高质量编程附录试题
- Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)
- Asp.net 实现图片缩放 无水印(方法二)
- iOS实践01
- c++/c/java 资源共享群
- poj - 1185 炮兵阵地 状压DP 解题报告
- POI一(介绍)
- mvc中路由的映射和实现IHttpHandler挂载
- Android进阶加密-第1章-Android系统架构-读书笔记
- Spring mybatis源码篇章-MapperScannerConfigurer关联dao接口
- Linux上安装MangoDB
- [UVALive 3661] Animal Run
- P3605 [USACO17JAN]Promotion Counting晋升者计数
- 什么是 PWA?
- [py]字符串/列表
- O(n)线性空间的迷宫生成算法
- python—第三库的安装方法
热门文章
- UE4添加模块
- Socket编程-基础使用
- shiro.ini
- python3笔记十三:python数据类型-Set集合
- 20191010-8 alpha week 1/2 Scrum立会报告+燃尽图 06
- centos安装FTP脚本
- DAY 3模拟赛
- 【剑指offer37】二叉树的序列化
- python中_new_()与_init_()的区别
- xcode dyld: Library not loaded: @rpath/libswiftCore.dylib问题解决