一本通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 ...
随机推荐
- jpa实例
ORM框架新的JPA ORM规范:1)JPA为POJO提供持久化标准规范.2)JPA的使用:Hibernate与TopLink以及OpenJpa都提供了JPA的实现.3)JPA主要技术: A.ORM ...
- 关于Flume中Chanel.Selector.header解释
flume内置的ChannelSelector有两种,分别是Replicating和Multiplexing. Replicating类型的ChannelSelector会针对每一个Event,拷贝到 ...
- Advanced Javascript outlining插件说明
Advanced Javascript outlining插件 用途:在js文件中写入#region/#endregion代码组合段,可收缩和展开.类似于后台页面的region用法. 效果截图如下(前 ...
- linux系统分析工具续-SystemTap和火焰图(Flame Graph)
本文为网上各位大神文章的综合简单实践篇,参考文章较多,有些总结性东西,自认暂无法详细写出,建议读文中列出的参考文档,相信会受益颇多.下面开始吧(本文出自 “cclo的博客” 博客,请务必保留此出处ht ...
- WWDC 2015 苹果发布会 笔记
北京时间2015年6月9日凌晨一点,美国旧金山,WWDC 2015苹果发布会,早前知道ios9会更注重系统的优化,看来果真如此,不过最让我惊讶的是Swift居然宣布开源,当时我就震惊了,不过Swift ...
- 使用php分页类实现简单分类
分页类參考地址:http://blog.csdn.net/buyingfei8888/article/details/40260127 just soso. 实现分页主要分为4步: 1 引入分页类 2 ...
- scala-数组操作
package com.bigdata import scala.collection.mutable.ArrayBuffer object ArrayO { def main(args: Array ...
- c# 解析百度图片搜索结果json中objURL图片原始地址
// http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result& ...
- 20155206 Exp8 WEB基础实践
20155206 Exp8 WEB基础实践 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以 ...
- 20155323刘威良《网络对抗》Exp9 Web安全基础
20155323刘威良<网络对抗>Exp9 Web安全基础 实践目的 理解常用网络攻击技术的基本原理. 实践内容 Webgoat实践下相关实验. 实践过程 开启WebGoat WebGoa ...