题意:Kiki 有 X 个硬币,已知 N 组这样的信息:X%x=Ai , X/x=Mi (x未知)。问满足这些条件的最小的硬币数,也就是最小的正整数 X。

解法:转化一下题意就是 拓展欧几里德求解同余方程组了。我们可以得到 N 个方程:Mi*x+Ai=X。一些解释请看下面的代码。

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 typedef long long LL;
7
8 LL aa[8],mm[8];
9
10 LL mabs(LL x) {return x>0?x:-x;}
11 LL exgcd(LL a,LL b,LL& x,LL& y)
12 {
13 if (!b) {x=1,y=0; return a;}
14 LL d,tx,ty;
15 d=exgcd(b,a%b,tx,ty);
16 x=ty,y=tx-(a/b)*ty;
17 return d;
18 }
19 int main()
20 {
21 int T,n;
22 scanf("%d",&T);
23 for (int kase=1;kase<=T;kase++)
24 {
25 scanf("%d",&n);
26 for (int i=1;i<=n;i++) scanf("%I64d",&mm[i]);
27 for (int i=1;i<=n;i++) scanf("%I64d",&aa[i]);
28 LL a,m,d,x,y;
29 a=aa[1],m=mm[1];
30 bool ok=false;
31 for (int i=2;i<=n;i++)
32 {
33 d=exgcd(m,mm[i],x,y);//mx-mm[i]y=aa[i]-a
34 if ((aa[i]-a)%d!=0) {ok=true;break;}
35 x=x*((aa[i]-a)/d);
36 LL t=mabs(mm[i]/d);
37 x=(x%t+t)%t;
38 a=m*x+a,m=m*mm[i]/d;//保证了x最小,a相应的也是最小的
39 }
40 LL ans;
41 if (ok) ans=-1;
42 else {ans=a; if (!ans) ans+=m;}
43 printf("Case %d: %I64d\n",kase,ans);
44 }
45 return 0;
46 }

【hdu 3579】Hello Kiki(数论--拓展欧几里德 求解同余方程组)的更多相关文章

  1. 【poj 2891】Strange Way to Express Integers(数论--拓展欧几里德 求解同余方程组 模版题)

    题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m .也就是有 k 对 ( ai , ri ) 可以这样表示--m%ai=ri.问 m 的最小值. 解法:拓展欧 ...

  2. 【hdu 1573】X问题(数论--拓展欧几里德 求解同余方程组的个数)

    题目:求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mod a[i] = b[i] ...

  3. 【poj 1061】青蛙的约会(数论--拓展欧几里德 求解同余方程)

    题意:已知2只青蛙的起始位置 a,b 和跳跃一次的距离 m,n,现在它们沿着一条长度为 l 的纬线(圈)向相同方向跳跃.问它们何时能相遇?(好有聊的青蛙 (΄◞ิ౪◟ิ‵) *)永不相遇就输出&quo ...

  4. 【poj 2115】C Looooops(数论--拓展欧几里德 求解同余方程 模版题)

    题意:有一个在k位无符号整数下的模型:for (variable = A; variable != B; variable += C)  statement; 问循环的次数,若"永不停息&q ...

  5. 【hdu 1576】A/B(数论--拓展欧几里德 求逆元 模版题)

    题意:给出 A%9973 和 B,求(A/B)%9973的值. 解法:拓展欧几里德求逆元.由于同余的性质只有在 * 和 + 的情况下一直成立,我们要把 /B 转化为 *B-1,也就是求逆元. 对于 B ...

  6. HDU3579:Hello Kiki(解一元线性同余方程组)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lc ...

  7. hdu 3579 Hello Kiki

    不互质的中国剩余定理…… 链接http://acm.hdu.edu.cn/showproblem.php?pid=3579 #include<iostream>#include<st ...

  8. HDU 3579——Hello Kiki

    好久没写什么数论,同余之类的东西了. 昨天第一次用了剩余定理解题,今天上百度搜了一下hdu中国剩余定理.于是就发现了这个题目. 题目的意思很简单.就是告诉你n个m[i],和n个a[i].表示一个数对m ...

  9. hdu 3579 Hello Kiki (中国剩余定理)

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

随机推荐

  1. Linux find 命令的初步实现(C++)

    Implement a myfind command following the find command in UNIX operating system. The myfind command s ...

  2. jenkins 构建历史 显示版本号

    0   jenkins 安装此插件: 此插件名为 " groovy postbuild " 1  效果图: 2   安装插件: 系统管理 --> 插件管理 --> 可选 ...

  3. 【RAC】Oracle 10g RAC相关启停命令,维护命令

    Oracle10g RAC关闭及启动步骤   情况1:需要关闭DB(所有实例),OS及Server. a.首先停止Oracle10g环境 $ lsnrctl stop (每个节点上停止监听,也可以用s ...

  4. 未使用绑定变量对share_pool的影响

    oracle SGA中包含数据高速缓冲,重做日志缓冲,以及共享池(share_pool).共享池中包含库高速缓冲(所有的SQL,执行计划等)和数据字典缓冲(对象的定义,权限等). 所以,如果SQL中没 ...

  5. idea 启动热部署Devtolls

    1.在子工程pom.xml中添加devtools jar包到需要启动的项目中 1 <dependency> 2 <groupId>org.springframework.boo ...

  6. [Usaco2005 Dec]Scales 天平

    题目描述 约翰有一架用来称牛的体重的天平.与之配套的是N(1≤N≤1000)个已知质量的砝码(所有砝码质量的数值都在31位二进制内).每次称牛时,他都把某头奶牛安置在天平的某一边,然后往天平另一边加砝 ...

  7. 入门OJ:八中生成树2

    题目描述 八中里面有N个建设物,M条边.对于这种要建最小生成树的问题,你应该很熟练了.现在老大决定降低某条边的费用,然后这条边必须要被选中,因为这条路他每天都要走,自然......问选了这条边后是否可 ...

  8. pandas的级联操作

    级联操作 pd.concat, pd.append import pandas as pd from pandas import DataFrame import numpy as np pandas ...

  9. SpringBoot单元测试的两种形式

    @ 目录 前言 demo环境 springbootTest Junit 总结 前言 最近公司要求2021年所有的项目代码单元测试覆盖率要达到90%,作为刚毕业的小白来说这简直就是噩梦啊,springb ...

  10. shell命令分隔符 二叉树结构的命令行树

    shell命令分隔符 二叉树结构的命令行树 I  ;&