int n=1e5+5,m;
ll a[maxn],b[maxn];
ll ans[maxn],tmp[maxn];
void Init()
{
int t=1000;
for(int i=-1000;i<=1000;i++)
tmp[i+t]=i*(3*i-1)/2;
ans[0]=1;
for(int i=1;i<n;i++)
{
ans[i]=0;
for(int j=1;j<=i;j++)
{
if(tmp[j+t]<=i)
{
if(j&1) ans[i]+=ans[i-tmp[j+t]];
else ans[i]-=ans[i-tmp[j+t]];
}
else break;
ans[i]=(ans[i]%mod+mod)%mod;
if(tmp[t-j]<=i)
{
if(j&1) ans[i]+=ans[i-tmp[t-j]];
else ans[i]-=ans[i-tmp[t-j]];
}
else break;
}
ans[i]=(ans[i]%mod+mod)%mod;
}
}
整数拆分 生成函数 模版
最新推荐文章于 2020-10-29 20:45:34 发布