蓝桥20034-幸福饺子馆 找规律/组合数学/逆元

https://www.lanqiao.cn/problems/20034/learning/?page=1&first_category_id=1

点击查看代码
'''
找规律在组合中存在对称性,即递增的位置对称,如
1 1 1 3
1 1 2 3
1 1 3 3
1 2 2 3
1 2 3 3
1 3 3 3
一共存在K种组合,则 [L,R]中的数字会平分 K * (N - 2) 次出现, 然后L, R会各自再出现 K 次, 整个问题中的平均值即是 (L + R) / 2
答案即是 (L + R) / 2 * K * N
K是多少? 在N个数中一共要完成R - L次递增,也就是在N - 1个位置一共完成 R - L 次递增的组合数。等价于将 R - L 个不区分的小球放进 N - 1个盒子
这个组合问题又等价于 用 N - 2 个隔板 分开 R - L 个小球
K = C(R - L + N - 2, N - 2)
'''
MOD = 998244353
MX = 2 * 10 ** 5
P = [1] * MX
for i in range(1, MX):
    P[i] = (P[i - 1] * i % MOD)

inv = [0] * MX
inv[-1] = pow(P[-1], MOD - 2, MOD)
for i in range(MX - 2, -1, -1):
    inv[i] = inv[i + 1] * (i + 1) % MOD 

t = int(input())
ans = []
for _ in range(t):
    n, l ,r = map(int, input().split())
    k = P[r - l + n - 2] * inv[n - 2] * inv[r - l] % MOD
    ans.append(str((l + r) * k * n * inv[2] % MOD))
print('\n'.join(ans))
posted @   凉叶染香  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示