Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推
2015-09-22 19:30
330 查看
题目链接:
Hdu 5451 Best Solver
题目描述:
对于
,给出x和mod,求y向下取整后取余mod的值为多少?
解题思路:
x的取值为[1, 232],看到这个指数,我的心情是异常崩溃的。(吐血。。。。。。) 可是仔细观察,它指数大,可是mod小啊,它吓人,可是可以暴力搞啊!!
这个题目一个难点就是要向下取整求余,详解见传送门,本题是向下取整,也就是向上取整加一。
还有就是指数太大,要找到循环节,其实由于mod小,循环节并没有太大,暴力跑就ok啦!
此刻内心是崩溃的
Hdu 5451 Best Solver
题目描述:
对于
,给出x和mod,求y向下取整后取余mod的值为多少?
解题思路:
x的取值为[1, 232],看到这个指数,我的心情是异常崩溃的。(吐血。。。。。。) 可是仔细观察,它指数大,可是mod小啊,它吓人,可是可以暴力搞啊!!
这个题目一个难点就是要向下取整求余,详解见传送门,本题是向下取整,也就是向上取整加一。
还有就是指数太大,要找到循环节,其实由于mod小,循环节并没有太大,暴力跑就ok啦!
此刻内心是崩溃的
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long LL; const LL maxn = 47000; LL r[maxn], ans[maxn], x, m; LL Pow (LL a, LL n, LL mod) { LL res = 1; while (n) { if (n % 2) res = (res * a) % mod; a =(a * a) % mod; n /= 2; } return res; } void init () { ans[0] = 2; ans[1] = 10; for (int i=2; i<maxn; i++) { ans[i] = (10 * ans[i-1] - ans[i-2] + m) % m; if (ans[i-1]==ans[0] && ans[i]==ans[1]) { r[m] = i - 1; return ; } } } LL solve () { init (); LL k = (1 + Pow (2, x, r[m])) % r[m]; return (ans[k] - 1 + m) % m; } int main () { LL t; scanf ("%lld", &t); for (int i=1; i<=t; i++) { scanf ("%lld %lld", &x, &m); printf("Case #%d: %lld\n", i, solve ()); } return 0; }
相关文章推荐
- 数据库的大表设计问题
- shiro-cas 单点登录
- NSLog再见!!你好,CocoaLumberjack
- http-response-codes
- 第九周第二天
- iOS9 微信支付支付宝支付适配
- ios激情详解之GCD
- 为Web 开发者Bug 报告和跟踪工具
- 3D数学 RotationMatrix
- Networking - ICMP 协议
- 感想
- 用MPMoviePlayerController播放视频的方法
- 我终于成为了BZOJ权限狗
- GOF 23 设计模式之 原型模式(prototype) 深复制与浅复制举例
- Repository模式
- Repository模式
- MWeb 1.7.1 版发布!支持导出为 RTF 和 Docx、发布到 Evernote 带样式、文档库备份和新网站主题等大量改进!
- 屏幕录制
- HDOJ 2057 A + B Again (十六进制)
- Python同步数据库的数据到Neo4J