P7419 「PMOI-2」参天大树 题解
考虑递推
设
可以发现,随着层数的加
- 当
i 和j 分别在两颗不同子树上时,一共有siz*siz*2 种情况(i ,j 的值可互换,因此要乘2 )。 - 当
i 和j 其中一个为根节点时,共有siz*2*2 种情况(两颗子树大小共为siz*2 ,i ,j 的值可互换再乘2 )。 - 当
i 和j 都为根节点时,有一种情况。
因此总递推式为:
code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll mod=998244353;
ll f[1000006];
int main()
{
f[1]=1;
ll siz=1;
for(int i=2;i<=1000000;i++)
{
f[i]=((f[i-1]<<2)+((siz*siz)<<1)+siz*siz+(siz<<2)+1)%mod;
siz=((siz<<1)+1)%mod;
}
int T;
cin>>T;
ll k;
while(T--)
{
scanf("%lld",&k);
printf("%lld\n",f[k]);
}
}