扩展欧几里德 poj1061 青蛙的约会
扩展欧几里德很经典。可是也有时候挺难用的。一些东西一下子想不明确。。
于是来了一个逆天模板。。仅仅要能列出Ax+By=C。就能解出x>=bound的一组解了~
LL exgcd(LL a, LL b, LL &x, LL &y) {
if(b == 0) {
x = 1; y = 0;
return a;
}
LL r = exgcd(b, a % b, x, y);
LL t = y;
y = x - a / b * y;
x = t;
return r;
} /*能够得到x>=bound时的x和y,返回true表示有解
否则无解,我仅仅想问这个模板无脑调用有木有~
可是不同的题目特判不同,有的地方记得还是特判,比方a和b的正负和是否为0~*/
bool solve(LL a, LL b, LL c, LL bound, LL &x, LL &y) {
LL xx, yy, d = exgcd(a, b, xx, yy);
if(c % d) return false; xx = xx * c / d; yy = yy * c / d;
LL t = (bound - xx) * d / b; x = xx + b / d * t;
if(x < bound) {
t++;
x = xx + b / d * t;
}
y = yy - a / d * t;
return true;
}
对于这道题,,我们能得出
A=n-m,B=L,C=x-y
注意A的正负性和是否为0。即可了。然后直接套模板 。以下就是个套模板的样例
#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional> using namespace std;
typedef long long LL;
typedef pair<int, int> PII; const int MX = 3e4 + 5; LL exgcd(LL a, LL b, LL &x, LL &y) {
if(b == 0) {
x = 1; y = 0;
return a;
}
LL r = exgcd(b, a % b, x, y);
LL t = y;
y = x - a / b * y;
x = t;
return r;
} /*能够得到x>=bound时的x和y,返回true表示有解
否则无解,我仅仅想问这个模板无脑调用有木有~
可是不同的题目特判不同,有的地方记得还是特判,比方a和b的正负和是否为0~*/
bool solve(LL a, LL b, LL c, LL bound, LL &x, LL &y) {
LL xx, yy, d = exgcd(a, b, xx, yy);
if(c % d) return false; xx = xx * c / d; yy = yy * c / d;
LL t = (bound - xx) * d / b; x = xx + b / d * t;
if(x < bound) {
t++;
x = xx + b / d * t;
}
y = yy - a / d * t;
return true;
} int main() {
LL x, y, m, n, L;
LL A, B, C, X, Y;
while(~scanf("%I64d%I64d%I64d%I64d%I64d", &x, &y, &m, &n, &L)) {
A = n - m; B = L; C = x - y;
if(A == 0) { //使用solve唯一的特判放在外面
printf("Impossible\n");
continue;
}
if(A < 0) A = -A, C = -C; //保证A和B都是正数
if(solve(A, B, C, 0, X, Y)) { //得到的x会>=1,由于不可能是0,并且也必需要非负嘛,理论上0和1都一样
printf("%I64d\n", X); //对,,就是这样,。做完了。
} else {
printf("Impossible\n");
}
}
return 0;
}
扩展欧几里德 poj1061 青蛙的约会的更多相关文章
- POJ1061 青蛙的约会 —— 扩展gcd
题目链接:https://vjudge.net/problem/POJ-1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- poj1061 青蛙的约会 扩展欧几里德的应用
这个题解得改一下,开始接触数论,这道题目一开始是看了别人的思路做的,后来我又继续以这种方法去做题,发现很困难,学长告诉我先看书,把各种词的定义看懂了,再好好学习,我做了几道朴素的欧几里德,尽管是小学生 ...
- POJ1061——青蛙的约会(扩展欧几里德)
青蛙的约会 Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
- POJ-1061青蛙的约会,扩展欧几里德求逆元!
青蛙的约会 以前不止一次看过这个题,但都没有去补..好吧,现在慢慢来做. 友情提示 ...
- POJ1061青蛙的约会(扩展欧几里德算法)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 102239 Accepted: 19781 Descript ...
- POJ1061 青蛙的约会(扩展欧几里得)
题目链接:http://poj.org/problem?id=1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- 解题报告:poj1061 青蛙的约会 - 扩展欧几里得算法
青蛙的约会 writer:pprp Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 119716 Accepted: 25238 ...
- POJ1061青蛙的约会[扩展欧几里得]
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 108911 Accepted: 21866 Descript ...
- 扩展欧几里得原理的应用:POJ1061青蛙的约会
/* POJ 1061: 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 123709 Accepted: 26395 ...
随机推荐
- RabbitMQ .NET消息队列使用入门(一)【简单示例】
首先下载安装包,我都环境是win7 64位: 去官网下载 otp_win64_19.0.exe 和rabbitmq-server-3.6.3.exe安装好 然后开始编程了: (1)创建生产者类: cl ...
- Vue页面间传值,以及客户端数据存储
初学Vue,遇到了页面传值的问题,大概网上学习了解了一下,在此跟大家分享一下学习心得,欢迎批评指正. 一.参数传值 如果是简单的页面传值,比如传一个id到详情页等等,推荐使用参数传值. 这里页面是通过 ...
- My97DatePicker 动态设置有效/无效日期
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- Java 基本的递归写法
1.首先我们得有一个树状结构的表,类似这种结构.必须得有 id,pid 其他的根据需要来. 我们叫它treeTbl表吧.这里pid为0的表示是顶级节点. 2.接着select * from tree ...
- buf.readInt8函数详解
offset {Number} 0 noAssert {Boolean} 默认:false 返回:{Number} 从该 Buffer 指定的 offset 位置开始读取一个有符号的8位整数值. 设置 ...
- Vue蚂蜂窝Vue-cli+webpack做的
先来看下效果 项目地址 喜欢star一下哦
- GitHub上fork别人打代码后如何保持和原作者同步的更新
1.进入你的GitHub发起Pull request 2.选择compare across forks 3.反向操作.base fork改为自己的,head fork改为原作者的 4.点击 cre ...
- 如何使用SQL Developer创建数据库连接
SQL Develope启动后,需要创建一个数据库连接,只有创建了数据库连接,才能在该数据库的方案中创建.更改对象或编辑表中的数据. 创建数据库连接的步骤如下. (1)在主界面左边窗口的“连接”选项卡 ...
- sqlserver 树结构递归(向上递归和向下递归)
--获取当前及以下部门 Create proc GetCurrentAndUnderOrg @orgId int as begin WITH cte AS ( SELECT * ,0 AS level ...
- 能够附加图片的标签控件iOS项目源码
这个源码案例是能够附加图片的标签控件,源码JTImageLabel,JTImageLabel能够附加图片的标签Label控件,图片可以随意更换.位置也能够很好的控制.效果图: <ignore_j ...