标签:
题目链接:
题目描述:
解题思路:
x的取值为[1, 232],看到这个指数,我的心情是异常崩溃的。(吐血。。。。。。) 可是仔细观察,它指数大,可是mod小啊,它吓人,可是可以暴力搞啊!!
这个题目一个难点就是要向下取整求余,详解见传送门,本题是向下取整,也就是向上取整加一。
还有就是指数太大,要找到循环节,其实由于mod小,循环节并没有太大,暴力跑就ok啦!
此刻内心是崩溃的
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 7 typedef long long LL; 8 const LL maxn = 47000; 9 LL r[maxn], ans[maxn], x, m; 10 11 LL Pow (LL a, LL n, LL mod) 12 { 13 LL res = 1; 14 while (n) 15 { 16 if (n % 2) 17 res = (res * a) % mod; 18 a =(a * a) % mod; 19 n /= 2; 20 } 21 return res; 22 } 23 24 void init () 25 { 26 ans[0] = 2; 27 ans[1] = 10; 28 for (int i=2; i<maxn; i++) 29 { 30 ans[i] = (10 * ans[i-1] - ans[i-2] + m) % m; 31 if (ans[i-1]==ans[0] && ans[i]==ans[1]) 32 { 33 r[m] = i - 1; 34 return ; 35 } 36 } 37 } 38 39 LL solve () 40 { 41 init (); 42 LL k = (1 + Pow (2, x, r[m])) % r[m]; 43 return (ans[k] - 1 + m) % m; 44 } 45 46 int main () 47 { 48 LL t; 49 scanf ("%lld", &t); 50 for (int i=1; i<=t; i++) 51 { 52 scanf ("%lld %lld", &x, &m); 53 printf("Case #%d: %lld\n", i, solve ()); 54 } 55 return 0; 56 }
Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推
标签:
原文地址:http://www.cnblogs.com/alihenaixiao/p/4830087.html