太久没碰这种数学了,写的比较笨
数列前k项≤ 2N的情况进行线性规划,约束条件有 a + (k-1)d ≤ 2n, a + kd >2n,前k项求和 >2n 在k ≥ 3时,约束条件2包含约束条件3,
a + (k-1)d ≤ 2n, a + kd >2n,在[3,inf)上区域求和,就是 a + 2d ≤ 2n
k = 1,2为特殊情况, k = 1时无法满足, k = 2时约束条件是 a + d ≤ 2n,a + 2d > 2n,2a+d>2n
最终约束区域即是 a + d ≤ 2n 除去 a + 2d > 2n, 2a + d ≤ 2n 关于这个被除去的部分里有多少点,用积分的思想去做, 2n - a / 2 < d ≤ 2n - 2a 在[0, 2n/3)上积分
a每增大1,d可取的范围 -1 -2交替,用两个等差数列求和计算
点击查看代码
mod = 998244353
for _ in range(int(input())):n = int(input())total = (2 * n) * (2 * n - 1) // 2except_ = 0if n % 3 == 0:except_ = (n + 1) * n // 3 // 2 + (n - 3) * n // 3 // 2if n % 3 == 1:except_ = (n - 2) * (n - 1) // 3 // 2 + (n + 2) * (n - 1) // 3 // 2if n % 3 == 2:except_ = (n - 1) * (n - 2) // 3 // 2 + n * (n + 1) // 3 // 2print((total - except_) % mod)