noip模拟赛 残
2017-10-22 21:06
211 查看
分析:这道题有点丧病啊......斐波那契数列本来增长就快,n <= 10^100又套2层,看到题目就让人绝望.不过这种题目还是有套路的.首先求斐波那契数列肯定要用到矩阵快速幂,外层的f可以通过取模来变小,可是里面的f不能直接取模1e9+7.因为余数最多就1e9+7种,所以肯定有一个循环节,打表发现内层f的循环节是2000000016,x的循环节是(1e9+7)*3,在求得时候mod循环节长度就ok了.
关于斐波那契的一些套路要记住:用矩阵快速幂加速、有循环节......
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const long long mod = 1000000007; const long long mod2 = mod * 2 + 2; const long long mod3 = mod2 * 3; typedef long long ll; int T, len, shu[210]; char s[210]; ll t; struct node { ll a[3][3]; node(){ memset(a, 0, sizeof(a)); } }x, y; ll zhuanhuan() { ll res = 0; for (int i = 1; i <= len; i++) shu[i] = s[i] - '0'; for (int i = 1; i <= len; i++) res = (res * 10 + shu[i]) % mod3; return res; } node mul1(node x, node y) { node p; memset(p.a, 0, sizeof(p.a)); for (int i = 1; i <= 2; i++) for (int j = 1; j <= 2; j++) for (int k = 1; k <= 2; k++) p.a[i][j] = (p.a[i][j] + x.a[i][k] * y.a[k][j] % mod2) % mod2; return p; } node mul2(node x, node y) { node p; memset(p.a, 0, sizeof(p.a)); for (int i = 1; i <= 2; i++) for (int j = 1; j <= 2; j++) for (int k = 1; k <= 2; k++) p.a[i][j] = (p.a[i][j] + x.a[i][k] * y.a[k][j] % mod) % mod; return p; } ll qpow1(ll b) { x.a[1][1] = 0; x.a[1][2] = 1; y.a[1][1] = 0; y.a[1][2] = y.a[2][1] = y.a[2][2] = 1; while (b) { if (b & 1) x = mul1(x, y); y = mul1(y, y); b >>= 1; } return x.a[1][1]; } ll qpow2(ll b) { x.a[1][1] = 0; x.a[1][2] = 1; y.a[1][1] = 0; y.a[1][2] = y.a[2][1] = y.a[2][2] = 1; while (b) { if (b & 1) x = mul2(x, y); y = mul2(y, y); b >>= 1; } return x.a[1][1]; } int main() { scanf("%d", &T); while (T--) { scanf("%s", s + 1); len = strlen(s + 1); t = zhuanhuan(); t = qpow1(t); printf("%lld\n", qpow2(t)); } return 0; }
相关文章推荐
- noip模拟赛 柜(暴力)
- noip模拟赛 圆桌游戏
- 2016.10.05【初中部 NOIP普及组 】模拟赛总结
- NOIP欢乐模拟赛 T3 解题报告
- noip 模拟赛 After 17(递推+特殊的技巧)
- noip模拟赛 都市
- 【NOIP模拟赛】【数学真奇妙系列】纸盒子
- noip模拟赛 好元素 哈希表的第一题
- 【NOIP模拟赛】【乱搞AC】【贪心】【模拟】匹配
- 2017.11.7 Noip2017 考前模拟赛
- 2016.10.29【初中部 NOIP提高组 】模拟赛C题解
- 2- noip模拟赛 DAY2
- 2016.10.30 NOIP模拟赛 day2 AM 整理
- 【NOIP模拟赛】Pickad 锄奸
- NOIP 模拟赛 那些年,我们学过的文化课 --致已退役的fqk神犇.
- 2016.10.30 NOIP模拟赛 day2 PM 整理
- 纪中训练 day8 【NOIP普及组】模拟赛D组 解题报告
- 2015.11.1 [XJOI] NOIP模拟赛总结
- NOIP模拟赛 寻找
- [福州三中NOIP模拟赛]女装