1635:【例 5】Strange Way to Express Integers

sol:貌似就是曹冲养猪的加强版,初看感觉非常没有思路,经过一番艰辛的***,得到以下的结果

随便解释下给以后的自己听:K是要求的数字

第一个读入的A1,Mod1不用改,从2开始做,把Mod2改成LCM,A2改成Ans,接着搞3

  1. /*
  2. 原式:
  3. X = A[1] (%Mod[1])
  4. X = A[2] (%Mod[2])
  5. ...
  6. X = A[n] (%Mod[n])
  7.  
  8. K[1]*Mod[1]+A[1] = X
  9. K[2]*Mod[2]+A[2] = X
  10.  
  11. 易知:
  12. K[1]*Mod[1]+A[1] = K[2]*Mod[2]+A[2]
  13. K[1]*Mod[1]-K[2]*Mod[2] = A[2]-A[1]
  14. K[1]*Mod[1]+K[2]*Mod[2] = A[2]-A[1] (类ax+by=c的形式)
  15. Exgcd解上式得到
  16. Ans = K[1]*Mod[1]+A[1] = K[2]*Mod[2]+A[2](这是这个方程的特解)
  17. 通解 = Ans+KL*LCM(Mod[1],Mod[2])
  18. 易知通解P 满足 P%Mod[1] = A[1] , P%Mod[2] = A[2]
  19. 然后可得合并后的式子 P%LCM = Ans
  20. 下一个式子就变成了
  21. KL*LCM+Ans = K[3]*Mod[3]+A[3]
  22. KL*LCM-K[3]*Mod[3] = A[3]-Ans
  23. (就是把前一个的Mod[i]变为LCM,A[i]变成Ans)
  24. */
  25. #include <bits/stdc++.h>
  26. using namespace std;
  27. typedef long long ll;
  28. inline ll read()
  29. {
  30. ll s=;
  31. bool f=;
  32. char ch=' ';
  33. while(!isdigit(ch))
  34. {
  35. f|=(ch=='-'); ch=getchar();
  36. }
  37. while(isdigit(ch))
  38. {
  39. s=(s<<)+(s<<)+(ch^); ch=getchar();
  40. }
  41. return (f)?(-s):(s);
  42. }
  43. #define R(x) x=read()
  44. inline void write(ll x)
  45. {
  46. if(x<)
  47. {
  48. putchar('-'); x=-x;
  49. }
  50. if(x<)
  51. {
  52. putchar(x+''); return;
  53. }
  54. write(x/);
  55. putchar((x%)+'');
  56. return;
  57. }
  58. #define W(x) write(x),putchar(' ')
  59. #define Wl(x) write(x),putchar('\n')
  60. const ll N=;
  61. int n;
  62. ll A[N],Mod[N];
  63. inline ll gcd(ll x,ll y)
  64. {
  65. return (!y)?(x):(gcd(y,x%y));
  66. }
  67. inline void Exgcd(ll a,ll b,ll &X,ll &Y)
  68. {
  69. if(b==)
  70. {
  71. X=;
  72. Y=;
  73. return;
  74. }
  75. Exgcd(b,a%b,X,Y);
  76. ll XX=X,YY=Y;
  77. X=YY;
  78. Y=XX-a/b*YY;
  79. return;
  80. }
  81. inline ll Solve()
  82. {
  83. int i;
  84. ll a,b,c,r,X,Y,LCM=Mod[],Ans=A[];
  85. for(i=;i<=n;i++)
  86. {
  87. a=Mod[i-];
  88. b=Mod[i];
  89. c=A[i]-A[i-];
  90. r=gcd(a,b);
  91. if(c%r) return -;
  92.  
  93. Exgcd(a,b,X=,Y=);
  94. X=X*c/r;
  95. ll tmp=b/r;
  96. X=(X>=)?(X%tmp):(X%tmp+tmp);
  97.  
  98. LCM=LCM*b/r;
  99. Mod[i]=LCM;
  100. Ans=X*Mod[i-]+A[i-];
  101. Ans%=LCM;
  102. A[i]=Ans;
  103. }
  104. return Ans;
  105. }
  106. int main()
  107. {
  108. // freopen("2.in","r",stdin);
  109. // freopen("my.out","w",stdout);
  110. int i;
  111. while(~scanf("%d",&n))
  112. {
  113. for(i=;i<=n;i++)
  114. {
  115. R(Mod[i]); R(A[i]);
  116. }
  117. Wl(Solve());
  118. }
  119. return ;
  120. }
  121. /*
  122. input
  123. 2
  124. 8 7
  125. 11 9
  126. output
  127. 31
  128.  
  129. input
  130. 3
  131. 91 26
  132. 62 49
  133. 95 80
  134. 3
  135. 23 9
  136. 89 80
  137. 72 15
  138. output
  139. 409435
  140. 36303
  141. */

一本通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. spring amqp初步了解

    Rabbitmq简介 生产者会把消息发送给RabbitMQ的交换中心(Exchange),Exchange的一侧是生产者,另一侧则是一个或多个队列,由Exchange决定一条消息的生命周期--发送给某 ...

  2. Scrapy 框架(二)数据的持久化

    scrapy数据的持久化(将数据保存到数据库) 一.建立项目 1.scrapy startproject dushu 2.进入项目 cd dushu 执行:scrapy genspider -t cr ...

  3. zabbix(2-server-agent)

    注意:以下步骤都是在LAMP配置之后进行的. 关于LAMP环境的简单快速搭建,见博客:http://afterdawn.blog.51cto.com/7503144/1923139 下面开始介绍在Ce ...

  4. opencv7-ml之统计模型

    在opencv的ml模块中有个统计模型类,而其他的比如朴素贝叶斯分类器.knn.svm等等其他模型都是基于该模型上派生出来的.所以先介绍下该模型. 该类的定义在文件"opencv\sourc ...

  5. day76

    昨日回顾:  1 ajax 什么是ajax:异步的JavaScript 和xml  2 特点:异步,局部刷新  3 简单的与后台交互:(携带数据:可以拼到url上---->从GET中取,)   ...

  6. 《Head First 设计模式》[01] 策略模式

    <Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...

  7. python with原理

    在python2.5+中可以用with来保证关闭打开的文件 with open('hello.txt') as f: do some file operations 为什么要引入with呢? 在之前如 ...

  8. 20155317王新玮《网络对抗技术》实验8 WEB基础实践

    20155317王新玮<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  9. 使用HibernateDaoSupport抽取BaseDao

            在开发采用Struts2+Spring+hibernate这三大框架的项目时,我们需要一个抽取一个BaseDao.这个Dao里面CRUD都给封装好,后续的其他Dao直接用它的功能就可以 ...

  10. TMS320VC5509片内ADC采集

    1. ADC采集比较简单,内部的10位的ADC,AIN0-AIN3的输入,主要是用的CSL的库函数#include <csl_adc.h> ; Uint16 samplestoraage[ ...