一本通1635【例 5】Strange Way to Express Integers
1635:【例 5】Strange Way to Express Integers
sol:貌似就是曹冲养猪的加强版,初看感觉非常没有思路,经过一番艰辛的***,得到以下的结果
随便解释下给以后的自己听:K是要求的数字
第一个读入的A1,Mod1不用改,从2开始做,把Mod2改成LCM,A2改成Ans,接着搞3
- /*
- 原式:
- X = A[1] (%Mod[1])
- X = A[2] (%Mod[2])
- ...
- X = A[n] (%Mod[n])
- K[1]*Mod[1]+A[1] = X
- K[2]*Mod[2]+A[2] = X
- 易知:
- K[1]*Mod[1]+A[1] = K[2]*Mod[2]+A[2]
- K[1]*Mod[1]-K[2]*Mod[2] = A[2]-A[1]
- K[1]*Mod[1]+K[2]*Mod[2] = A[2]-A[1] (类ax+by=c的形式)
- Exgcd解上式得到
- Ans = K[1]*Mod[1]+A[1] = K[2]*Mod[2]+A[2](这是这个方程的特解)
- 通解 = Ans+KL*LCM(Mod[1],Mod[2])
- 易知通解P 满足 P%Mod[1] = A[1] , P%Mod[2] = A[2]
- 然后可得合并后的式子 P%LCM = Ans
- 下一个式子就变成了
- KL*LCM+Ans = K[3]*Mod[3]+A[3]
- KL*LCM-K[3]*Mod[3] = A[3]-Ans
- (就是把前一个的Mod[i]变为LCM,A[i]变成Ans)
- */
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- inline ll read()
- {
- ll s=;
- bool f=;
- char ch=' ';
- while(!isdigit(ch))
- {
- f|=(ch=='-'); ch=getchar();
- }
- while(isdigit(ch))
- {
- s=(s<<)+(s<<)+(ch^); ch=getchar();
- }
- return (f)?(-s):(s);
- }
- #define R(x) x=read()
- inline void write(ll x)
- {
- if(x<)
- {
- putchar('-'); x=-x;
- }
- if(x<)
- {
- putchar(x+''); return;
- }
- write(x/);
- putchar((x%)+'');
- return;
- }
- #define W(x) write(x),putchar(' ')
- #define Wl(x) write(x),putchar('\n')
- const ll N=;
- int n;
- ll A[N],Mod[N];
- inline ll gcd(ll x,ll y)
- {
- return (!y)?(x):(gcd(y,x%y));
- }
- inline void Exgcd(ll a,ll b,ll &X,ll &Y)
- {
- if(b==)
- {
- X=;
- Y=;
- return;
- }
- Exgcd(b,a%b,X,Y);
- ll XX=X,YY=Y;
- X=YY;
- Y=XX-a/b*YY;
- return;
- }
- inline ll Solve()
- {
- int i;
- ll a,b,c,r,X,Y,LCM=Mod[],Ans=A[];
- for(i=;i<=n;i++)
- {
- a=Mod[i-];
- b=Mod[i];
- c=A[i]-A[i-];
- r=gcd(a,b);
- if(c%r) return -;
- Exgcd(a,b,X=,Y=);
- X=X*c/r;
- ll tmp=b/r;
- X=(X>=)?(X%tmp):(X%tmp+tmp);
- LCM=LCM*b/r;
- Mod[i]=LCM;
- Ans=X*Mod[i-]+A[i-];
- Ans%=LCM;
- A[i]=Ans;
- }
- return Ans;
- }
- int main()
- {
- // freopen("2.in","r",stdin);
- // freopen("my.out","w",stdout);
- int i;
- while(~scanf("%d",&n))
- {
- for(i=;i<=n;i++)
- {
- R(Mod[i]); R(A[i]);
- }
- Wl(Solve());
- }
- return ;
- }
- /*
- input
- 2
- 8 7
- 11 9
- output
- 31
- input
- 3
- 91 26
- 62 49
- 95 80
- 3
- 23 9
- 89 80
- 72 15
- output
- 409435
- 36303
- */
一本通1635【例 5】Strange Way to Express Integers的更多相关文章
- Strange Way to Express Integers
I. Strange Way to Express Integers 题目描述 原题来自:POJ 2891 给定 2n2n2n 个正整数 a1,a2,⋯,ana_1,a_2,\cdots ,a_na ...
- 中国剩余定理+扩展中国剩余定理 讲解+例题(HDU1370 Biorhythms + POJ2891 Strange Way to Express Integers)
0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中 ...
- poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9472 ...
- POJ2891——Strange Way to Express Integers(模线性方程组)
Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...
- [POJ 2891] Strange Way to Express Integers
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 10907 ...
- 数论F - Strange Way to Express Integers(不互素的的中国剩余定理)
F - Strange Way to Express Integers Time Limit:1000MS Memory Limit:131072KB 64bit IO Format: ...
- Strange Way to Express Integers(中国剩余定理+不互质)
Strange Way to Express Integers Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...
- POJ2891 Strange Way to Express Integers
题意 Language:Default Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total S ...
- poj 2981 Strange Way to Express Integers (中国剩余定理不互质)
http://poj.org/problem?id=2891 Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 13 ...
随机推荐
- spring amqp初步了解
Rabbitmq简介 生产者会把消息发送给RabbitMQ的交换中心(Exchange),Exchange的一侧是生产者,另一侧则是一个或多个队列,由Exchange决定一条消息的生命周期--发送给某 ...
- Scrapy 框架(二)数据的持久化
scrapy数据的持久化(将数据保存到数据库) 一.建立项目 1.scrapy startproject dushu 2.进入项目 cd dushu 执行:scrapy genspider -t cr ...
- zabbix(2-server-agent)
注意:以下步骤都是在LAMP配置之后进行的. 关于LAMP环境的简单快速搭建,见博客:http://afterdawn.blog.51cto.com/7503144/1923139 下面开始介绍在Ce ...
- opencv7-ml之统计模型
在opencv的ml模块中有个统计模型类,而其他的比如朴素贝叶斯分类器.knn.svm等等其他模型都是基于该模型上派生出来的.所以先介绍下该模型. 该类的定义在文件"opencv\sourc ...
- day76
昨日回顾: 1 ajax 什么是ajax:异步的JavaScript 和xml 2 特点:异步,局部刷新 3 简单的与后台交互:(携带数据:可以拼到url上---->从GET中取,) ...
- 《Head First 设计模式》[01] 策略模式
<Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...
- python with原理
在python2.5+中可以用with来保证关闭打开的文件 with open('hello.txt') as f: do some file operations 为什么要引入with呢? 在之前如 ...
- 20155317王新玮《网络对抗技术》实验8 WEB基础实践
20155317王新玮<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...
- 使用HibernateDaoSupport抽取BaseDao
在开发采用Struts2+Spring+hibernate这三大框架的项目时,我们需要一个抽取一个BaseDao.这个Dao里面CRUD都给封装好,后续的其他Dao直接用它的功能就可以 ...
- TMS320VC5509片内ADC采集
1. ADC采集比较简单,内部的10位的ADC,AIN0-AIN3的输入,主要是用的CSL的库函数#include <csl_adc.h> ; Uint16 samplestoraage[ ...