蓝桥19865 线性规划

太久没碰这种数学了,写的比较笨
数列前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) // 2
    except_ = 0
    if n % 3 == 0:
        except_ = (n + 1) * n // 3 // 2 + (n - 3) * n // 3 // 2
    if n % 3 == 1:
        except_ = (n - 2) * (n - 1) // 3 // 2 + (n + 2) * (n - 1) // 3 // 2
    if n % 3 == 2:
        except_ = (n - 1) * (n - 2) // 3 // 2 + n * (n + 1) // 3 // 2
    print((total - except_) % mod)
posted @   凉叶染香  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示