base = -3getgx(k, base, gx)foriinrange(k): d.append(0)foriinrange(0,len(d) -1-len(gx) +1+1):ifd[i] ==0:continueforjinrange(len(gx) -1, -1, -1):#要倒着处理 否则d[i]一开始就被更新为0了d[i + j] = (d[i + j] - gx[j] * d[i])#print(*d)foriinrange(l...
[0] = -3, d[1]=1; int hp = 1; while (hp<k) { memset(g, 0, sizeof g); for (int i=hp;i>=0;i--) for (int j=1;j>=0;j--) { g[i+j] += (d[i]*b[j])%929; g[i+j] %= 929; } hp++; b[0] *= 3; b[0] %= 929; memcpy(d,g,sizeof g); } } ...
v4.push_back(1); v4.push_back(-3);longlongmul=-3;for(longlongi=2;i<=(1<<(s+1));i++){ v4.push_back(0); mul=mul*3%929;for(longlongj=v4.size()-1;j>=1;j--)v4[j]+=v4[j-1]*mul%929,v4[j]%=929; }longlongw4=1<<(s+1);for(longlongi=1;i<=w4;i++) v3...
所以需要此语句:if(NumEnd>a[i]-1) NumEnd=a[i]-1;//上界超出范围,变为区间最上界,来将此情况的bug修复。 (3)、求和 上述操作先按f取值相同分段,再按g值相同分段,所以在最底层的段中f值与g值皆恒定,即两者的差值也恒定:以差值乘以数量即可,最后将所有区间计算量加起来即可。 三、其他思路 再附上一个...