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的更多相关文章

  1. Strange Way to Express Integers

    I. Strange Way to Express Integers 题目描述 原题来自:POJ 2891 给定 2n2n2n 个正整数 a1,a2,⋯,ana_1,a_2,\cdots ,a_na​ ...

  2. 中国剩余定理+扩展中国剩余定理 讲解+例题(HDU1370 Biorhythms + POJ2891 Strange Way to Express Integers)

    0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中 ...

  3. poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9472   ...

  4. POJ2891——Strange Way to Express Integers(模线性方程组)

    Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...

  5. [POJ 2891] Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 10907 ...

  6. 数论F - Strange Way to Express Integers(不互素的的中国剩余定理)

    F - Strange Way to Express Integers Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format: ...

  7. Strange Way to Express Integers(中国剩余定理+不互质)

    Strange Way to Express Integers Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...

  8. POJ2891 Strange Way to Express Integers

    题意 Language:Default Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total S ...

  9. poj 2981 Strange Way to Express Integers (中国剩余定理不互质)

    http://poj.org/problem?id=2891 Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 13 ...

随机推荐

  1. 女神画廊App (Swift1.2)

    这个App的是storyboard+code的结合,主要的重点是: 1.segue传递图片值. 2.Autolayout中可以使用右下角三角符号使用Add Missing Constraints进行大 ...

  2. China Internet Conference(2018.07.12)

    中国互联网大会 时间:2018.07.12地点:北京国家会议中心

  3. 【HNOI2016】矿区

    题面 题解 知识引入 1. 平面图 一个图\(G=(V,E)\),若能将其画在平面上,且任意两条边的交点只能是\(G\)的顶点,则称\(G\)可嵌入平面,或称\(G\)是可平面的. 可平面图在平面上的 ...

  4. [CF1038F]Wrap Around[AC自动机+dp]

    题意 题目链接 分析 题意容易转化成求循环之后不包含 \(s\) 的串的个数. 首先建立 AC 自动机.考虑一个暴力的做法:枚举长度为 \(n\) 的字符串 \(t\) 最终(后缀) 和 \(s\) ...

  5. LOJ#2799. 「CCC 2016」生命之环

    题意 给你一个 \(n\) 个 \(\rm 01\) 组成的环,每次操作之后每个位置为1当且仅当他的左右恰好有1个1.输出进行 \(T\) 次操作之后的环. \(n\leq 10^5, T\leq 1 ...

  6. (2)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- .NetCore启动配置 和 .NetCoreWebApi

    什么是.Net Core?.Net Core是微软开发的另外一个可以跨Linux.Windows.mac等平台的.Net.Net Core相关知识看文章地步dotnet dllname.dll 运行P ...

  7. 吉他软件Guitar Pro播放无声音的解决方法

    系统环境:适用于Windows操作系统和macOS的Guitar Pro . 问题表现:已成功安装Guitar Pro ,但用Guitar Pro 播放时没有任何声音或播放失真. 解决方案:首先确保安 ...

  8. 关于GitHub上传没有记录(小绿块不显示的问题)

    最近开始使用上github来上传保存自己在学习中所写过的代码,打算将自己每天的成果能有个保存,然后就利用上GitHub这么一个利器. 听说GitHub的那个绿块是用来记录每天的上传记录的,结果我将代码 ...

  9. Linux下安装maven(mvn命令)

    Maven(mvn)是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具(百度百科) 简单理解为一个打包 ...

  10. [Unity]制作游戏中名字板的过程记录

    先大概说一下需求: 1 每个模型上都要有名字板:人.怪.npc等等. 2 名字板上会显示:名字(文字).血条(图片)等 3 因为是透视相机,名字板离得太近会变得超大,且主角移动,名字板的位置相对于相机 ...