$Task$ $4$:考试的时候,我一直在想$O(1)$的方法求出解,但是为什么不行呢??无法证明这一点,我好菜啊$qwq$。可以发现沿着一三象限角平分线分开,左右的格点数是一样的,除了在这条将平分线上的点,即$P(x,y),x=y$时,这部分可以后面加上,不要算两遍。
for (ll i = 1; i <= t; i++)
ans = (ans + k / i) % MOD;
for (ll i = t + 1; i <= k; i = t + 1) {
t = k / (k / i);
ans = (ans + (k / i) * (t - i + 1)) % MOD;
}
现在来看怎么分别求出$dp[l][k-1]$、$k$、$dp[k+1][r]$。
$$=\sum\limits_{u=k+1}^{r}t_u \times d_u+(t_u+t_l+t_{l+1}+...+t_{k-1}+t_{k})\times \sum\limits_{u=k+1}^{r} d_u$$
$$=dp[k+1][r]+(st_{k-1}-st_{l-1})\times (sd_{r}-sd_k)$$
PS:上面的$st$和$sd$是前缀和。
然后就可以愉快的$dp$了~~
本文作者:Snowflake_Pink
本文链接:https://snowflake.pink/archives/25/
最后修改时间:2020-04-13 11:15:37
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!