Hello Kiki

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 258 Accepted Submission(s): 111
 
Problem Description
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.
 
Input
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
 
Output
            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.
 
Sample Input
2
2
14 57
5 56
5
19 54 40 24 80
11 2 36 20 76
 
Sample Output
Case 1: 341
Case 2: 5996
 
Author
digiter (Special Thanks echo)
 
Source
2010 ACM-ICPC Multi-University Training Contest(14)——Host by BJTU
 

题意:

求同于方程。上模板。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=;
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=;y=;}
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[],R=r[],x,y,d;
for(int i=;i<=n;i++){
ex_gcd(M,m[i],d,x,y);
if((r[i]-R)%d) return -;
x=(r[i]-R)/d*x%(m[i]/d);
R+=x*M;
M=M/d*m[i];
R%=M;
}
return R>?R:R+M;
}
int main()
{
int t,n;
scanf("%d",&t);
for(int cas=;cas<=t;cas++){
scanf("%d",&n);
ll m[maxn],r[maxn];//m除数,r余数
for(int i=;i<=n;i++) scanf("%lld",&m[i]);
for(int i=;i<=n;i++) scanf("%lld",&r[i]);
printf("Case %d: %I64d\n",cas,ex_crt(m,r,n));
}
return ;
}

最新文章

  1. height:100%与height:inherit的区别
  2. java如何提取url里的域名
  3. SQL Server 的表数据简单操作(表数据查询)
  4. 【转】Android布局优化之ViewStub
  5. nodeschool.io 8
  6. SourceTree基本操作
  7. ajax的post用法
  8. Hibernate批量提交
  9. C#基础知识之IOC
  10. Niagara帮助文档资料整理
  11. jQuery中each循环的跳出和结束
  12. Java——值传递与引用传递
  13. windows 与 mac socket通信
  14. vue项目中跳转到外部链接方法
  15. Android内存优化之磁盘缓存
  16. EditPlus配置Java
  17. WinForm中Component Class、User Control及Custom Control的区别和使用
  18. C语言清空输入缓冲区的N种方法对比【转】
  19. X86汇编概要
  20. HDU - 2844 Coins(多重背包+完全背包)

热门文章

  1. 数据库Mysql的学习(四)-表的记录操作
  2. 利用nohup后台运行jar文件包程序
  3. 【Linux 运维】linux系统查看版本信息
  4. 《javascript模式--by Stoyan Stefanov》书摘--汇总
  5. Thunder团队第六周 - Scrum会议3
  6. from module import 和 import 的区别
  7. 一起写一个Android图片轮播控件
  8. LintCode-7-二叉树的序列化和反序列化
  9. Thinkphp5使用validate实现验证功能
  10. Expected Conditions的常用函数