POJ1061:青蛙的约会+POJ2115C Looooops+UVA10673Play with Floor and Ceil(扩展欧几里得)
http://poj.org/problem?id=1061
第一遍的写法:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
long long x,y,m,n,l,j1,j2;
long long gcd(long long a,long long b)
{
return b==?a:gcd(b,a%b);
}
void extend(long long a,long long b,long long &x1,long long &y1)
{
if(b==)
{
x1=;
y1=;
return ;
}
extend(b,a%b,x1,y1);
long long t=x1;
x1=y1;
y1=t-a/b*y1;
return ;
}
int main()
{
while(scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l)!=EOF)
{
long long a=n-m;
long long b=l;
long long c=x-y;
long long temp=gcd(a,b);
if(c%temp!=||n==m)
{
printf("Impossible\n");
continue;
}
a/=temp;
b/=temp;
c/=temp;
extend(a,b,j1,j2);
long long t=-(j1*c)/b;
j1=c*j1+t*b;
if(j1<)
{
if(b>) j1+=b;
}
printf("%lld\n",j1);
}
return ;
}
第二遍:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
long long x,y,m,n,l,j1,j2;
long long gcd(long long a,long long b)
{
return b==?a:gcd(b,a%b);
}
void extend(long long a,long long b,long long &x1,long long &y1)
{
if(b==)
{
x1=;
y1=;
return ;
}
extend(b,a%b,x1,y1);
long long t=x1;
x1=y1;
y1=t-a/b*y1;
return ;
}
int main()
{
while(scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l)!=EOF)
{
long long a=n-m;
long long b=l;
long long c=x-y;
long long temp=gcd(a,b);
if(c%temp!=||n==m)
{
printf("Impossible\n");
continue;
}
a/=temp;
b/=temp;
c/=temp;
extend(a,b,j1,j2);
long long t=((j1*c)%b+b)%b;
printf("%lld\n",t);
}
return ;
}
POJ2115:
题意:
对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束。
若在有限次内结束,则输出循环次数。
否则输出死循环。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
long long a,b,c,k;
long long x1,x2;
long long gcd(long long a,long long b)
{
return b==?a:gcd(b,a%b);
}
void extend(long long A,long long B,long long &x1,long long &y1)
{
if(B==)
{
x1=;
y1=;
return ;
}
extend(B,A%B,x1,y1);
long long t=x1;
x1=y1;
y1=t-(A/B)*y1;
}
int main()
{
while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)!=EOF)
{
if(a==&&b==&&c==&&k==) break;
long long A=c;
long long B=pow(,k);
long long C=b-a;
long long temp=gcd(A,B);
if(C%temp)
{
printf("FOREVER\n");
continue;
}
A/=temp;
B/=temp;
C/=temp;
extend(A,B,x1,x2);
long long t=(C*x1%B+B)%B;
printf("%lld\n",t);
}
return ;
}
题目解析:
这两道题目都是简单的扩展欧几里得求二元一次方程最优解,理解了就好做了,浪费了一天多的时间才搞透,脑残的孩子果断得慢慢学。
更通常的是:我们需要求解方程的最小整数解 若我们已经求得x0,y0为方程中x的一组特解,那么 x=x0+b/gcd(a,b)*t,y=y0-a/gcd(a,b)*t(t为任意整数)也为方程的解 且b/gcd(a,b),a/gcd(a,b)分别为x,y的解的最小间距,所以x在0~b/gcd(a,b)区间有且仅有一个解, 同理y在0~a/gcd(a,b)同样有且仅有一个解,这个解即为我们所需求的最小正整数解。
为什么b/gcd(a,b),a/gcd(a,b)分别为x,y的解的最小间距? 解:假设c为x的解的最小间距,此时d为y的解的间距,所以x=x0+c*t,y=y0-d*t(x0,y0为一组特解,t为任意整数) 带入方程得:a*x0+a*c*t+b*y0-b*d*t=n,因为a*x0+b*y0=n,所以a*c*t-b*d*t=0,t不等于0时,a*c=b*d 因为a,b,c,d都为正整数,所以用最小的c,d,使得等式成立,ac,bd就应该等于a,b的最小公倍数a*b/gcd(a,b), 所以c=b/gcd(a,b),d就等于a/gcd(a,b)。
所以,若最后所求解要求x为最小整数,那么x=(x0%(b/gcd(a,b))+b/gcd(a,b))%(b/gcd(a,b))即为x的最小整数解。 x0%(b/gcd(a,b))使解落到区间-b/gcd(a,b)~b/gcd(a,b),再加上b/gcd(a,b)使解在区间0~2*b/gcd(a,b), 再模上b/gcd(a,b),则得到最小整数解(注意b/gcd(a,b)为解的最小距离,重要)
UVA10673Play with Floor and Ceil
题目解析:
超级大水题,模版题。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
long long p,q,x,k;
long long x1,x2;
long long gcd(long long a,long long b)
{
return b==?a:gcd(b,a%b);
}
void extend(long long a,long long b,long long &x1,long long &y1)
{
if(b==)
{
x1=;
y1=;
return ;
}
extend(b,a%b,x1,y1);
long long t=x1;
x1=y1;
y1=t-a/b*y1;
return ;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&x,&k);
long long a=floor((double)x/(double)k);
long long b=ceil((double)x/(double)k);
long long c=x;
long long temp=gcd(a,b);
a/=temp;
b/=temp;
c/=temp;
extend(a,b,x1,x2);
x1=x1*c;
x2*=c;
printf("%lld %lld\n",x1,x2);
}
return ;
}
POJ1061:青蛙的约会+POJ2115C Looooops+UVA10673Play with Floor and Ceil(扩展欧几里得)的更多相关文章
- 青蛙的约会 (ax+by=c求最小整数解)【拓展欧几里得】
青蛙的约会(点击跳转) 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住 ...
- POJ1061 青蛙的约会 —— 扩展gcd
题目链接:https://vjudge.net/problem/POJ-1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- POJ1061 青蛙的约会(扩展欧几里得)
题目链接:http://poj.org/problem?id=1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- POJ1061 青蛙的约会
Description 两 只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它 们出发之前忘记了一件很重要 ...
- [poj1061]青蛙的约会<扩展欧几里得>
题目链接:http://poj.org/problem?id=1061 其实欧几里得我一直都知道,只是扩展欧几里得有点蒙,所以写了一道扩展欧几里得裸题. 欧几里得算法就是辗转相除法,求两个数的最大公约 ...
- pku 1061 青蛙的约会 扩展欧几里得
青蛙的约会Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 120482 Accepted: 25449Description 两只青 ...
- poj 1061 青蛙的约会 (扩展欧几里得模板)
青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status ...
- JZYZOJ1371 青蛙的约会 扩展欧几里得 GTMD数论
http://172.20.6.3/Problem_Show.asp?id=1371 题意是两个青蛙朝同一个方向跳 http://www.cnblogs.com/jackge/archive/2013 ...
- Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)
一.Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...
随机推荐
- meta标签整理
meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词.标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称/值对. 一 ...
- 深入分析JavaWeb Item43 -- Struts2开发入门
一.Struts2概述 1.Struts2是什么? Struts2是一个M(模型-域–范围模型)V(View视图)C(控制器)框架(模型2).框架都是一个半成品. 提高开发效率. Struts1是一个 ...
- 开源 免费 java CMS - FreeCMS1.9 移动APP生成网站列表数据
项目地址:http://www.freeteam.cn/ 生成网站列表数据 提取同意移动APP訪问的网站列表,生成json数据到/mobile/index.html页面. 从左側管理菜单点击生成网站列 ...
- 工作流JBPM_day01:5-管理流程定义3点改进
工作流JBPM_day01:5-管理流程定义3点改进 1.打包多个文件上传 再部署一个 查询所有看看,旧版本也查出来了 2.查询时只查询所有最新的版本 3.删除指定名称指定key的所有的它的版本
- Oracle-未能加载文件或程序集“oracle.dataaccess”或它的某一个依赖项。试图加载格式不正确的程序。
未能加载文件或程序集“oracle.dataaccess”或它的某一个依赖项.试图加载格式不正确的程序. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以 ...
- cocos2d-x游戏引擎核心之六——绘图原理和绘图技巧
一.OpenGL基础 游戏引擎是对底层绘图接口的包装,Cocos2d-x 也一样,它是对不同平台下 OpenGL 的包装.OpenGL 全称为 Open Graphics Library,是一个开放的 ...
- Linux命令之type - 显示命令的类型
用途说明 type命令用来显示指定命令的类型.一个命令的类型可以是如下之一 alias 别名 keyword 关键字,Shell保留字 function 函数,Shell函数 builtin 内建命令 ...
- php实现注册审核功能
本章主要实现注册之后审核通过的功能,共这几部分组成: 1. 创建数据库:mydb数据库的user表 注:isok判断是否通过审核,1为通过,0为未通过. 显示效果: 2.首先做注册界面:zhuce ...
- http://www.xuexi111.com/
http://www.xuexi111.com/ http://www.minxue.net/ 拼吾爱
- jstl标签怎么实现分页中下一页
<script type="text/javascript"> //分页按钮处理 function goPageAction(page ...