hdu3579 Hello Kiki(数论)
用到中国剩余定理,然后用扩展欧几里得算法求解。
这里有两个注意点,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(数论)的更多相关文章
- 【数论】【扩展欧几里得】hdu3579 Hello Kiki
解一元线性同余方程组(模数不互质) 结合看这俩blog讲得不错 http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/qq_27 ...
- Hdu3579 Hello Kiki
Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Gcd&Exgcd算法学习小记
Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...
- hdu3579-Hello Kiki-(扩展欧几里得定理+中国剩余定理)
Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【hdu 3579】Hello Kiki(数论--拓展欧几里德 求解同余方程组)
题意:Kiki 有 X 个硬币,已知 N 组这样的信息:X%x=Ai , X/x=Mi (x未知).问满足这些条件的最小的硬币数,也就是最小的正整数 X. 解法:转化一下题意就是 拓展欧几里德求解同余 ...
- HDU3579:Hello Kiki(解一元线性同余方程组)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lc ...
- 数论之同余性质 线性同余方程&拔山盖世BSGS&中国剩余定理
先记录一下一些概念和定理 同余:给定整数a,b,c,若用c不停的去除a和b最终所得余数一样,则称a和b对模c同余,记做a≡b (mod c),同余满足自反性,对称性,传递性 定理1: 若a≡b (mo ...
- Codeforces Round #382 Div. 2【数论】
C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
随机推荐
- Introduction to gaussian filter 高斯滤波器
Introduction to gaussian filter 我尝试尽可能低门槛的介绍这些好玩的东东-这里只须要正态分布函数作为基础就可以開始玩图像的高斯滤波了. Don't panic ! 在通常 ...
- Python 2.7.3 urllib2.urlopen 获取网页出现乱码解决方案
出现乱码的原因是,网页服务端有bug,它硬性使用使用某种特定的编码方案,而并没有按照客户端的请求头的编码要求来发送编码. 解决方案:使用chardet来猜测网页编码. 1.去chardet官网下载ch ...
- Fedora 20 Gnome安装及配置记录
下载了F20的Gnome版,原先安装的是19KDE的,原因是昨晚看书,觉得电脑开着也没什么事情,倒不如看看能不能升级或下载点东西 原先是KDE的界面,所以打算换换风格,使用下Gnome,不过更换过程总 ...
- SSMS2008插件开发(3)--部署调试SSMS2008插件
原文:SSMS2008插件开发(3)--部署调试SSMS2008插件 上一次说到VS2008中的插件开发,最终结果插件是部署在VS2008中,现在我们将插件部署到SSMS2008(Microsoft ...
- WindowsService开发遇到的问题
1.Windows服务安装 通过cmd运行指令安装Windows服务: 安装方法:运行cmd,以InstallUtil.exe 来运行 Windows服务程序. 如果是Release模式的话,直接在c ...
- Windows 下安装 Oracle 12c 教程
原文 Windows 下安装 Oracle 12c 教程 申明:本文原作者:Jmq 本文给大家带来的是 Oracle 12C 的安装教程. 1.准备 1.1 下载 Oracle 12c 安装程序 ...
- Android项目---TouchListener
public static interface View.OnTouchListener android.view.View.OnTouchListener Known Indirect Subcla ...
- 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 ...
- How feedback work for your improvement
Why generally feedback is the perspective from others for some event. In China there is story,some k ...
- 【值得收藏】Mathematica数值计算工具的学习资料汇编【可免费下载】
Mathematica学习教程 Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.Mathematica与Matlab ...