【学习笔记-中国剩余定理】POJ1006 Biorhythms
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 139500 | Accepted: 44772 |
Description
Since the three cycles have different periods, the peaks of the three cycles generally occur at different times. We would like to determine when a triple peak occurs (the peaks of all three cycles occur in the same day) for any person. For each cycle, you will be given the number of days from the beginning of the current year at which one of its peaks (not necessarily the first) occurs. You will also be given a date expressed as the number of days from the beginning of the current year. You task is to determine the number of days from the given date to the next triple peak. The given date is not counted. For example, if the given date is 10 and the next triple peak occurs on day 12, the answer is 2, not 3. If a triple peak occurs on the given date, you should give the number of days to the next occurrence of a triple peak.
Input
Output
Case 1: the next triple peak occurs in 1234 days.
Use the plural form ``days'' even if the answer is 1.
Sample Input
- 0 0 0 0
- 0 0 0 100
- 5 20 34 325
- 4 5 6 7
- 283 102 23 320
- 203 301 203 40
- -1 -1 -1 -1
Sample Output
- Case 1: the next triple peak occurs in 21252 days.
- Case 2: the next triple peak occurs in 21152 days.
- Case 3: the next triple peak occurs in 19575 days.
- Case 4: the next triple peak occurs in 16994 days.
- Case 5: the next triple peak occurs in 8910 days.
- Case 6: the next triple peak occurs in 10789 days.
- 题解:中国剩余定理 参考
设m1,m2,m3,m4两两互素,则同余方程组
x≡a1(m1)
x≡a2(m2)
x≡a3(m3)
x≡a4(m4)
....
x≡ak(mk)
一定有解,x≡(a1*M1*M1^(-1)+a2*M2*M2^(-1)+....)
其中M=m1*m2*...*mk,Mi=M/mi,Mi^(-1)是Mi在模mi意义下的逆元。
普通的中国剩余定理要求所有mi互素,那么如果不互素呢?
我们采用两两合并的思想,假设要合并如下两个方程
x=a1+m1*x1
x=a2+m2*x2
那么得到
a1+m1x1=a2+m2x2 => m1x1+m2x2=a2-a1
再利用扩展欧几里得算法解出x1的最小正整数解,再带入
x=a1+m1x1,得到x后合并为一个方程的结果过为
y≡x(mod lcm(m1,m2))
这样一直合并下去,最终可以求得同余方程的解。
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- using namespace std;
- int a[],m[];
- int p,e,i,d,t=;
- void exgcd(int a,int b,int &x,int &y){
- if(b==){
- x=;
- y=;
- return;
- }
- exgcd(b,a%b,x,y);
- int tmp=x;
- x=y;
- y=tmp-(a/b)*y;
- }
- int CRT(int a[],int m[],int n){
- int M=,ans=;
- for(int i=;i<=n;i++)M*=m[i];
- for(int i=;i<=n;i++){
- int x,y;
- int Mi=M/m[i];
- exgcd(Mi,m[i],x,y);
- ans=(ans+Mi*x*a[i])%M;
- }
- if(ans<)ans+=M;
- return ans;
- }
- int main(){
- while(cin>>p>>e>>i>>d){
- if(p==-&&e==-&&i==-&&d==-)break;
- a[]=p;a[]=e;a[]=i;
- m[]=;m[]=;m[]=;
- int ans=CRT(a,m,);
- if(ans<=d)ans+=;
- printf("Case %d: the next triple peak occurs in %d days.\n",t++,ans-d);
- }
- return ;
- }
不互素的
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<iostream>
- #include<algorithm>
- #define N 5
- #define ll long long
- using namespace std;
- ll n,m[N],a[N],m1,e;
- ll read()
- {
- ll x=,f=; char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
- while(ch>=''&&ch<=''){x=x*+ch-''; ch=getchar();}
- return x*f;
- }
- ll exgcd(ll a,ll b,ll &x,ll &y)
- {
- if(b==)
- {
- x=,y=;
- return a;
- }
- ll r=exgcd(b,a%b,x,y),tmp;
- tmp=x,x=y,y=tmp-a/b*y;
- return r;
- }
- ll crt()
- {
- ll a1=a[],a2,m2,d,c;m1=m[];
- for(ll i=;i<=n;++i)
- {
- a2=a[i],m2=m[i];
- c=a2-a1;ll x=,y=;
- d=exgcd(m1,m2,x,y);
- if(c%d) return -;
- x=x*c/d;
- int mod=m2/d;
- x=(mod+x%mod)%mod;
- a1+=m1*x;m1*=mod;
- }
- return a1;
- }
- int main()
- {
- // freopen("mod.in","r",stdin);
- // freopen("mod.out","w",stdout);
- n=;
- for(int i=;i<=n;i++)
- m[i]=read(),a[i]=read();
- printf("%lld\n",crt());
- return ;
- }
【学习笔记-中国剩余定理】POJ1006 Biorhythms的更多相关文章
- 学习笔记 - 中国剩余定理&扩展中国剩余定理
中国剩余定理&扩展中国剩余定理 NOIP考完回机房填坑 ◌ 中国剩余定理 处理一类相较扩展中国剩余定理更特殊的问题: 在这里要求 对于任意i,j(i≠j),gcd(mi,mj)=1 (就是互素 ...
- Hbase 学习笔记4----原理
MapReduce 中如何处理HBase中的数据?如何读取HBase数据给Map?如何将结果存储到HBase中? Mapper类:包括一个内部类(Context)和四个方法(setup,map,cle ...
- 五毛的cocos2d-x学习笔记06-处理用户交互
前几篇感觉自己在写教育文章,╮(╯▽╰)╭.今天换成开发者的口吻,毕竟我也是在边学边写博客. 处理用户交互包括:单点触摸.多点触摸.事件传递.传感器.物理按键等部分. 单点触摸: 触摸事件传递顺序 o ...
- Three.js学习笔记04--纹理
1 纹理由图片组成 3D世界的纹理由图片组成. 将纹理以一定的规则映射到几何体上,一般是三角形上,那么这个几何体就有纹理皮肤了. 首先应该有一个纹理类,其次是有一个加载图片的方法,将这张图片和这个纹 ...
- Git学习笔记04-管理修改
Git跟踪并管理的是修改,而非文件.新增文件,修改一行,删除一点,都算是修改. 在.git工作区新增一个文件,test.txt,输入test git ...然后git add add之后修改t ...
- Git学习笔记03-原理
在Git中,算上远程Git仓库有四个工作区域 Git本地有三个区域(工作区域.暂存区,资源区,远程Git仓库) 工作区域:就是你本机写好的代码,你可以看到的 暂存区:你写好的代码上传后被git管理的内 ...
- Biorhythms(poj1006+中国剩余定理)
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 117973 Accepted: 37026 Des ...
- 扩展中国剩余定理(EXCRT)学习笔记
扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2} ...
- POJ1006 - Biorhythms(中国剩余定理)
题目大意 略...有中文... 题解 就是解同余方程组 x≡(p-d)(mod 23) x≡(e-d)(mod 28) x≡(i-d)(mod 33) 最简单的中国剩余定理应用.... 代码: #in ...
随机推荐
- spring bean的scope
scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象. ...
- mybatis注解实现CURD
我们来看下面这段代码: /** * The user Mapper interface. * * @author Wangzun * * @version 1.0 * * */ @CacheNames ...
- phpstorm+xdebug, 实现断点调试: xdebug如何配置
[XDebug] xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug" xdebug.trace_output_dir=" ...
- 我的Android进阶之旅------>Android系统设置默认来电铃声、闹钟铃声、通知铃声
首先了解Android系统本身提供的默认铃声文件,这些文件都放在 /system/media/audio 目录下. /system/media/audio/ringtones 系统来电铃声 / ...
- hibernate多对多关系配置
一.创建用户,角色实体类. 一名用户可以有多个角色.一个角色可以对于多名用户. 用户实体类 public class User { private int uId; private String uN ...
- spring项目改名后不能启动的原因及解决办法
今日修改了一个spring项目的项目名称,修改后启动项目Debug as->Debug on server,过了很久也没有出现web首页,仔细看项目的定时器已经启动,eclipse的Consol ...
- 从分布式锁来看redis和zookpeer!
从分布式锁来看redis和zookpeer! 目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面.要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫.坦白说, ...
- 小程序真机GET请求出现406错误
问题:微信开发模拟器请求成功,获得数据,但是在真机上出现406请求错误,无法获得请求结果 原因:真机微信小程序的请求头与模拟器不同 怎么发现的:在请求头强制添加Accept即可解决 修复:在请求Hea ...
- PAT 天梯赛 L2-010. 排座位 【并查集】
题目链接 https://www.patest.cn/contests/gplt/L2-010 思路 因为 题意中 朋友的朋友 就是朋友 那么 朋友的关系 用 并查集 保存 但是 敌对关系 只有直接的 ...
- 苹果企业账号发布APP详解——通过自己网站分发应用
一.通过企业账号申请证书 1 Certificate Signing Request (CSR)文件 在Mac系统中进入“钥匙串访问”,选择“钥匙串访问”-“证书助理”-“从证书颁发机构请求证书…”, ...