Monkey Tradition---LightOj1319(中国剩余定理模板)
2016-03-25 16:36
204 查看
题目链接:http://lightoj.com/volume_showproblem.php?problem=1319
题意:有 n 个猴子,n 棵树,树的高度为 L ,每个猴子刚开始的时候都在树的底部,后来往上跳,每次跳的距离是pi,最后不能跳到树上面所以最后会有个到顶端的距离ri,求L的最小值;
典型的模板题;
中国剩余定理详解:/article/6573066.html
题意:有 n 个猴子,n 棵树,树的高度为 L ,每个猴子刚开始的时候都在树的底部,后来往上跳,每次跳的距离是pi,最后不能跳到树上面所以最后会有个到顶端的距离ri,求L的最小值;
典型的模板题;
中国剩余定理详解:/article/6573066.html
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #define MAXN 22 typedef long long LL; void ex_gcd(LL a, LL b, LL &x, LL &y) { if(b==0) { x = 1; y = 0; return ; } ex_gcd(b, a%b, x, y); LL temp = x; x = y; y = temp - a/b * y; if(a*b<0) { x = -x; y = -y; } } int main() { LL A[MAXN], R[MAXN], N0, N[MAXN]; int n, T, t = 1; scanf("%d", &T); while(T--) { scanf("%d", &n); memset(A, 0, sizeof(A)); memset(R, 0, sizeof(R)); memset(N, 0, sizeof(N)); N0 = 1; for(int i=1; i<=n; i++) { scanf("%lld %lld", &A[i], &R[i]); N0 *= A[i]; } LL x = 0; for(int i=1; i<=n; i++) { LL K, K0; ex_gcd(N0/A[i], -A[i], K, K0); N[i] = A[i] * K0 + 1; ///或者 N[i] = N0/A[i] * K; x = (x + N[i] * R[i] + N0) % N0; } printf("Case %d: %lld\n", t++, (x+N0)%N0); } return 0; }
相关文章推荐
- Java I/O流体系
- 腾讯刷题笔记
- [Mac]环境变量配置
- CSDN的博客积分计算规则及博客排名规则
- 为什么头文件这么定义
- 为什么byte的取值范围是-128到127
- Mac下为mysql配置环境变量
- 【资源汇集.转】来自西弗吉利亚大学li xin整理的CV代码合集
- 小白笔记--------------linux下的cp命令
- ubuntu 安装Matlab 解决显示中文乱码
- Java内存与垃圾回收调优
- 返回整数数组最大子数组和
- [How to] 真机调试
- java 转码
- Java实现过滤中文乱码
- linux的ip地址排序
- ios学习总结(2) -- UIButton的使用
- 浅析spring中注解的运行
- 63.保留小数位数和精确数字(NSDecimalNumber/NSDecimalNumberHandler)
- jQuery操作HTM元素的常见事件