HDU3579 线性同余方程(模板 余数不一定互质)
2017-03-05 17:23
190 查看
Hello Kiki |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 258 Accepted Submission(s): 111 |
[align=left]Problem Description[/align] One day I was shopping in the supermarket. There was a cashier counting coins seriously when a little kid running and singing \\\\\\\"门前大桥下游过一群鸭,快来快来 数一数,二四六七八\\\\\\\". And then the cashier put the counted coins back morosely and count again... Hello Kiki is such a lovely girl that she loves doing counting in a different way. For example, when she is counting X coins, she count them N times. Each time she divide the coins into several same sized groups and write down the group size Mi and the number of the remaining coins Ai on her note. One day Kiki\\\\\\\'s father found her note and he wanted to know how much coins Kiki was counting. |
[align=left]Input[/align] The first line is T indicating the number of test cases. Each case contains N on the first line, Mi(1 <= i <= N) on the second line, and corresponding Ai(1 <= i <= N) on the third line. All numbers in the input and output are integers. 1 <= T <= 100, 1 <= N <= 6, 1 <= Mi <= 50, 0 <= Ai < Mi |
[align=left]Output[/align] For each case output the least positive integer X which Kiki was counting in the sample output format. If there is no solution then output -1. |
[align=left]Sample Input[/align]2 2 14 57 5 56 5 19 54 40 24 80 11 2 36 20 76 |
[align=left]Sample Output[/align]Case 1: 341 Case 2: 5996 |
[align=left]Author[/align] digiter (Special Thanks echo) |
[align=left]Source[/align] 2010 ACM-ICPC Multi-University Training Contest(14)——Host by BJTU |
求同于方程。上模板。
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=100005; const int inf=0x7fffffff; typedef long long ll; void ex_gcd(ll a,ll b,ll &d,ll &x,ll &y)//扩展欧几里得 { if(!b) {d=a;x=1;y=0;} else{ ex_gcd(b,a%b,d,y,x); y-=x*(a/b); } } ll ex_crt(ll *m,ll *r,int n) { ll M=m[1],R=r[1],x,y,d; for(int i=2;i<=n;i++){ ex_gcd(M,m[i],d,x,y); if((r[i]-R)%d) return -1; x=(r[i]-R)/d*x%(m[i]/d); R+=x*M; M=M/d*m[i]; R%=M; } return R>0?R:R+M; } int main() { int t,n; scanf("%d",&t); for(int cas=1;cas<=t;cas++){ scanf("%d",&n); ll m[maxn],r[maxn];//m除数,r余数 for(int i=1;i<=n;i++) scanf("%lld",&m[i]); for(int i=1;i<=n;i++) scanf("%lld",&r[i]); printf("Case %d: %I64d\n",cas,ex_crt(m,r,n)); } return 0; }
相关文章推荐
- 互质的数取模一定有循环节?
- 项目心得-通用模板并不一定通用!
- n元线性同余方程模板
- hdu 3579 Hello Kiki 中国剩余定理(不互质形式)模板题
- HDOJ 1573 X问题 (余数不互质的中国剩余定理)
- POJ2891 Strange Way to Express Integers(解多元线性同余方程)(中国剩余定理非互质版)(例题)
- 中国剩余定理算法详解(余数互质和不互质)
- codeforces 264B Good Sequences(DP+灵活思维)【最长不互质序列模板】
- 非互质的中国剩余定理模板(1573)
- 中国剩余定理模板题 互质与非互质
- 模板整理之线性同余方程组(逆元法)
- 2891 Strange Way to Express Integers 利用拓展欧几里德求模线性方程组(模的数不一定互质,要考虑周全)
- 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释&模板)
- 【模板小程序】十进制大数除法(输出商和余数)
- HDU3579中国剩余定理(不互质的情况)
- 有一定通用性的单调队列模板
- 线性同余方程模板( A+C*x=B(mod D) )
- 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释&模板)
- 中国剩余定理算法详解(余数互质和不互质)
- 中国剩余定理(不互质的情况)-HDU3579