/**
[迭代] poj 2748 Logs Stacking
迭代 f[n] = f[n-1] + 2f[n-2] + 3f[n-3] +...+ f[1] + 1;
网上好多说是 f[n] = 3f[n-1] - f[n-1],
这个没有看出来,不过容易推出另一个 f[n] = f[n-1] + sum[n-1];
这时,由于n很大,还是无法AC。
幸好取得模比较小,考虑到可能有循环节(看了discuss),这里循环节为75000
前N个打表,O(1)的输出,可是即使这样G++下还是TLE,C++下1204MS 过的
*/
#include <stdio.h>
#define MOD 100000
#define N 75000
int a[N] = {1,1,2},sum = 3,i,n;
int main()
{
for(i = 3; i < N; ++i)
{
a[i] = (a[i-1] + sum) % MOD;
sum = (sum + a[i]) % MOD;
//a[i] = ((a[i-1] * 3 - a[i-2]) % MOD + MOD)%MOD;
}
scanf("%d",&i);
while(i--)
{
scanf("%d",&n);
printf("%d\n",a[n%N]);
}
return 0;
}
[迭代] poj 2748 Logs Stacking
最新推荐文章于 2020-10-29 17:11:31 发布