标签:printf include 输入 lan 预处理 const http void str
题目链接:https://www.hpuoj.com/contest/16/problem/J/
单测试点时限: 1.0 秒
内存限制: 512 MB
这是一段 C/C++ 代码,用于计算递推数列 ???? 的。
const int MOD = (int)1e9 + 7;
int a(int n) {
if(n < 3) return 1;
return ((a(n - 1) << 1) % MOD + (a(n - 2) >> 1)) % MOD;
}
现在请根据这段代码输出第 ?? 项数列的值 ???? 。
第一行一个整数 ??。
之后的 ?? 行,每行 1 个整数,表示 ?? 。
0<??≤105, 0<??≤106 。
每一行请输出一个 ???? 的值
3 1 2 3
1 1 2
解题思路:把递归变成非递归,用数组保存就好了。然后预处理一下
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; #define ll long long #define maxn 1000000+10 ll k[maxn]; const int MOD = (int)1e9 + 7; void init() { for (int i =0; i < 3; i++) { k[i] = 1; } for (int i = 3; i < maxn; i++) { k[i] = ((k[i-1]<<1 )%MOD+ (k[i-2]>>1)%MOD)%MOD; } } int main() { init(); ll t,n; cin >> t; while (t--) { cin >> n; printf("%lld\n",k[n]); } return 0; }
标签:printf include 输入 lan 预处理 const http void str
原文地址:https://www.cnblogs.com/SJCHEN/p/10638032.html