用到中国剩余定理,然后用扩展欧几里得算法求解。

这里有两个注意点,1、硬币数量不能为0或者负数

2、每个group数量有可能大于50,样例中就有

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int M[10],A[10],n;
int extEuclid(int p,int q,int &x,int &y)//扩展欧几里得算法
{
int d,tmp;
if(q==0){x=1;y=0;return p;}
d=extEuclid(q,p%q,x,y);
tmp=x;x=y;y=tmp-p/q*y;
return d;//返回最大公约数
}
int calcu(int cur)
{
int x,y,g,t;
int a1=M[cur-1],a2=M[cur];
int b1=A[cur-1],b2=A[cur];
g=extEuclid(a1,a2,x,y);
int s=b2-b1;
if(s%g)
return -1;
else
{
t=a2/g;
x=x*s/g;//这个一定要放在“x=(x%t+t)%t”前面,否则就wa了
x=(x%t+t)%t;//求出在0~t之间的一个解。这一步必须有,否则就wa,因为爆int了,可改成long long,改过后也可以ac
a2=a1*a2/g;
s=((a1*x+b1)%a2+a2)%a2;
A[cur]=s;
M[cur]=a2;
if(cur==n-1)
{
if(s==0)
return M[cur];
else
return A[cur];
}
else
return calcu(cur+1);
}
}
int main()
{
int i,j,k,t;
scanf("%d",&t);
for(k=1;k<=t;k++)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&M[i]);
for(i=0;i<n;i++)
scanf("%d",&A[i]);
printf("Case %d: ",k);
if(n==1)
{
if(A[0]==0)
A[0]=M[0];
printf("%d\n",A[0]);
continue;
}
printf("%d\n",calcu(1));
}
return 0;
}

hdu3579 Hello Kiki(数论)的更多相关文章

  1. 【数论】【扩展欧几里得】hdu3579 Hello Kiki

    解一元线性同余方程组(模数不互质) 结合看这俩blog讲得不错 http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/qq_27 ...

  2. Hdu3579 Hello Kiki

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

  3. Gcd&Exgcd算法学习小记

    Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...

  4. hdu3579-Hello Kiki-(扩展欧几里得定理+中国剩余定理)

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

  5. 【hdu 3579】Hello Kiki(数论--拓展欧几里德 求解同余方程组)

    题意:Kiki 有 X 个硬币,已知 N 组这样的信息:X%x=Ai , X/x=Mi (x未知).问满足这些条件的最小的硬币数,也就是最小的正整数 X. 解法:转化一下题意就是 拓展欧几里德求解同余 ...

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

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

  7. 数论之同余性质 线性同余方程&拔山盖世BSGS&中国剩余定理

    先记录一下一些概念和定理 同余:给定整数a,b,c,若用c不停的去除a和b最终所得余数一样,则称a和b对模c同余,记做a≡b (mod c),同余满足自反性,对称性,传递性 定理1: 若a≡b (mo ...

  8. Codeforces Round #382 Div. 2【数论】

    C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...

  9. NOIP2014 uoj20解方程 数论(同余)

    又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...

随机推荐

  1. Introduction to gaussian filter 高斯滤波器

    Introduction to gaussian filter 我尝试尽可能低门槛的介绍这些好玩的东东-这里只须要正态分布函数作为基础就可以開始玩图像的高斯滤波了. Don't panic ! 在通常 ...

  2. Python 2.7.3 urllib2.urlopen 获取网页出现乱码解决方案

    出现乱码的原因是,网页服务端有bug,它硬性使用使用某种特定的编码方案,而并没有按照客户端的请求头的编码要求来发送编码. 解决方案:使用chardet来猜测网页编码. 1.去chardet官网下载ch ...

  3. Fedora 20 Gnome安装及配置记录

    下载了F20的Gnome版,原先安装的是19KDE的,原因是昨晚看书,觉得电脑开着也没什么事情,倒不如看看能不能升级或下载点东西 原先是KDE的界面,所以打算换换风格,使用下Gnome,不过更换过程总 ...

  4. SSMS2008插件开发(3)--部署调试SSMS2008插件

    原文:SSMS2008插件开发(3)--部署调试SSMS2008插件 上一次说到VS2008中的插件开发,最终结果插件是部署在VS2008中,现在我们将插件部署到SSMS2008(Microsoft ...

  5. WindowsService开发遇到的问题

    1.Windows服务安装 通过cmd运行指令安装Windows服务: 安装方法:运行cmd,以InstallUtil.exe 来运行 Windows服务程序. 如果是Release模式的话,直接在c ...

  6. Windows 下安装 Oracle 12c 教程

    原文 Windows 下安装 Oracle 12c 教程 申明:本文原作者:Jmq   本文给大家带来的是 Oracle 12C 的安装教程. 1.准备 1.1 下载 Oracle 12c 安装程序 ...

  7. Android项目---TouchListener

    public static interface View.OnTouchListener android.view.View.OnTouchListener Known Indirect Subcla ...

  8. Oracle Database Instant Client 11g 32位和64位 安装包发布

    Oracle Database Instant Client 11g 32位和64 Oracle Database Instant Client 11g 11.2.0.3.0 Instant Clie ...

  9. How feedback work for your improvement

    Why generally feedback is the perspective from others for some event. In China there is story,some k ...

  10. 【值得收藏】Mathematica数值计算工具的学习资料汇编【可免费下载】

    Mathematica学习教程 Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.Mathematica与Matlab ...