点击题目链接

Hello Kiki
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

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

题意理解

  Kiki数X枚硬币时,她要数N次。每次她都将硬币分成几个相同大小的组,分别记录每组硬币数Mi和剩余硬币数Ai。求共有多少(X)枚硬币。

解题思路

  参考中国剩余定理SCL、拓展中国剩余定理SCL

  需要注意的是,这边不能简单的用中国剩余定理SCL,而应该使用拓展中国剩余定理SCL。因为我们无法保证m1,m2,...,mnm_1,m_2, ... ,m_nm1​,m2​,...,mn​两两互质。
  那么我们就直接用模版接口套公式做就可以。

  但这里要注意:
  因为SCL中int extend_CRT(int a[],int m[],int n);最后返回的是(ret+M)%M。其中M为m1,m2,...,mnm_1,m_2,...,m_nm1​,m2​,...,mn​的最小公倍数,所以当 a1=0,a2=0,...,an=0a_1=0,a_2=0,...,a_n=0a1​=0,a2​=0,...,an​=0 的时候。得到的是(0+M)%M=0,明显不符合要求。这时应该得到的正好是M才合理。所以在上面链接中提供的SCL的最后是return ((ret+M)%M)?((ret+M)%M):M;这里已经进行了特判:如果结果为0,需要输出几个模的最小公倍数。

  参考下面代码操作:
注:如果对两个函数接口不熟悉的可以参考中国剩余定理SCL、拓展中国剩余定理SCL这篇博客。

#include <iostream>
using namespace std;int extend_gcd( int a, int b, int &x, int &y )//拓展欧几里得
{if( b==0 ){x = 1;y = 0;return a;}else{int r = extend_gcd(b,a%b,y,x);y -= x*(a/b);return r;}
}
int extend_CRT( int a[], int m[], int n )//拓展中国剩余定理
{int M = m[0];int ret = a[0];for(int i=1;i<n;++i){int x,y;int gcd = extend_gcd(M,m[i],x,y);//调用外部函数:拓展欧几里得if( (a[i]-ret)%gcd != 0 ) return -1;//无解int lcm = M/gcd*m[i];int tm = ((a[i]-ret)/gcd)%(m[i]/gcd);ret = (ret+M*x*tm)%lcm;M = lcm;}return ((ret+M)%M)?((ret+M)%M):M;
}
int main()
{ios::sync_with_stdio(0);int T,N;int a[6],m[6];int ans,case_i=1;cin >> T;while(T--){cin >> N;for(int i=0;i<N;++i) cin >> m[i];for(int i=0;i<N;++i) cin >> a[i];ans = extend_CRT(a,m,N);cout << "Case " << case_i++ << ": " << ans << endl;}
}

【hdu 3579】Hello Kiki相关推荐

  1. 大数加法【HDU 1002】

    大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...

  2. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)

    题干: Dear contestant, now you are an excellent navy commander, who is responsible of a tough mission ...

  3. 【HDU - 1455】Sticks (dfs + 剪枝)

    题干: George took sticks of the same length and cut them randomly until all parts became at most 50 un ...

  4. 【HDU - 4006】The kth great number (优先队列,求第k大的数)

    题干: Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to wri ...

  5. 【HDU - 4217 】Data Structure? (线段树求第k小数)

    题干: Data structure is one of the basic skills for Computer Science students, which is a particular w ...

  6. 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)

    题干: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.  这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当 ...

  7. 【HDU 5765】Bonds(进制运算妙用)

    [HDU 5765]Bonds(进制运算妙用) Bonds Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K ...

  8. 【HDU 5755】Gambler Bo(高斯消元)

    [HDU 5755]Gambler Bo(高斯消元) Gambler Bo Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072 ...

  9. 【HDU 6973】Bookshop 树剖+平衡树

    [HDU 6973]Bookshop 树剖+平衡树 [引言] ​ 平衡树的题做得比较少,难得补一次神题,记录一下供以后学习. [题意] ​ 给出一棵 nnn 个结点的树,每个结点有一个价值为 pip_ ...

最新文章

  1. 2016江苏计算机二级考试时间,2016年江苏计算机二级考试报名时间_无忧考网.pdf...
  2. monkeyrunner无法运行的问题解决方案总结
  3. oracle analyze分区表,PostgreSQL Analyze分区表:主表与子表的统计信息问题
  4. SDUT 3399 数据结构实验之排序二:交换排序
  5. ios 中的tintColor
  6. 一个间歇性进程hang问题的处理
  7. 细分领域:偏门的色流玩法+简单的色流变现套路
  8. 双路CPU笔记本计算机,什么是双路cpu cpu双路什么意思 - 云骑士一键重装系统
  9. Flutter学习笔记
  10. 使用HBuilder打包App教程
  11. u盘装系统学计算机好,新手想学重装系统难不难?详细的教程来了,学不会只能怪自己了...
  12. android发短信!渣本毕业两年经验,终局之战
  13. 镜像构建工具SOURCE TO IMAGE(S2I)实践
  14. Win10数字小键盘按键变成方向键怎么办?Win10数字小键盘按键变为方向键解决方法
  15. 华为交换机本地查看登录和操作日志
  16. bootstraptable treeGrid 懒加载_为 Vue 的惰性加载加一个进度条
  17. LOFTER72D94FF8E0603DBE38066DB525285F1C
  18. 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布
  19. Flutter进阶篇(4)-- Flutter的Future异步详解一、认识Future二、创建多个Future的执行步骤三、then函数嵌套使用的执行步骤四、综合示例五、我们来看看Future的源码
  20. freemaker生成doc文档(特殊字符导致异常)

热门文章

  1. [Pandas] 将某栏位中的值进行替换
  2. JZOJ-senior-5953. 【NOIP2018模拟11.5A组】生死之境
  3. 软件测试基础 - 测试方法
  4. 同济大学计算机博士,只因专科出身简历基本挂,应聘单位月薪仅给12K!
  5. 34-博客网站数据库-博文信息数据操作(一)
  6. Excel下的数据挖掘:学生成绩统计分析实战之排名
  7. 用Tagxedo在线制作个性化词云
  8. 智能语音助手的工作原理是?先了解自然语言处理(NLP)与自然语言生成(NLG)
  9. 黑科技!美团网页首帧优化实践
  10. 征信不良记录,花钱就能修复?