【BZOJ】1477 青蛙的约会 扩欧
来源:互联网 发布:python老男孩10期网盘 编辑:程序博客网 时间:2024/05/30 04:33
题目传送门
开坑开坑,从此入了数论的坑再也停不下来……话说数论什么的真的好难懂啊……
这题的解题思路就是扩展欧几里得算法。对于同余方程ax≡c(mod b),可以转化成ax+by=c来求解。
回到这题,我们可以很快的发现题目要我们求(x+m*t)-(y-n*t)=Lp(t为步数,p为圈数)
然后我们推一下公式,可以发现(m-n)*t-Lp=y-x,然后就是扩欧的套路了:对于一个不定方程ax+by=c,可以先求出a*x0+b*y0=gcd(a,b),然后同时乘上c/gcd(a,b),得到a*x0*c/gcd(a,b)+b*y0*c/gcd(a,b)=c。这里解出来的x0*c/gcd(a,b)可能是个负数,转化成正数就行了。
然后发现这题就是一个扩欧的裸题,直接AC就行了。
附上AC代码:
#include <cstdio>using namespace std; int n,m,x,y,l,X,Y,t; inline int exgcd(int a,int b,int &x,int &y){ if (b==0) return x=1,y=0,a; int k=exgcd(b,a%b,x,y),t=x; return x=y,y=t-a/b*y,k;} int main(void){ scanf("%d%d%d%d%d",&x,&y,&m,&n,&l); if ((x-y)%(t=exgcd((n-m),l,X,Y))) puts("Impossible"); else printf("%lld\n",((long long)(x-y)/t*X%(l/t)+(l/t))%(l/t)); return 0;}
阅读全文
0 0
- 【BZOJ】1477 青蛙的约会 扩欧
- bzoj 1477: 青蛙的约会
- bzoj 1477 青蛙的约会
- BZOJ 1477 青蛙的约会
- BZOJ 1477: 青蛙的约会
- POJ 青蛙的约会(BZOJ 1477)
- 【扩展欧几里得】Bzoj 1477:青蛙的约会
- BZOJ-1477 青蛙的约会 拓展欧几里德
- bzoj 1477: 青蛙的约会 拓展欧几里得
- BZOJ 1477 青蛙的约会 扩展欧几里得
- BZOJ 1477 青蛙的约会 [扩展欧几里得]
- BZOJ 1477: 青蛙的约会 扩展欧几里得
- 1477: 青蛙的约会
- |BZOJ 1477|扩展欧几里得算法|青蛙的约会
- bzoj 1477 青蛙的约会 拓展欧几里得(详细解析)
- 青蛙的约会(扩欧)
- - 青蛙的约会 exgcd 扩欧
- POJ 1061 青蛙的约会【扩欧】
- 博弈模板(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)
- 设计模式概括
- hdu 4786 生成树~
- 欢迎使用CSDN-markdown编辑器
- 笔试题 6
- 【BZOJ】1477 青蛙的约会 扩欧
- 微信小程序,通过事件传递数据
- 编程测试题-小猴子摘桃最多摘多少
- 单词查找树
- C++ Primer 读书笔记——函数
- linux初学者-mail篇
- hdoj 6156 Palindrome Function
- UVA
- C语言运算符优先级