当前位置: 首页 > news >正文

[ABC251Ex] Fill Triangle

很有意思的题。

首先考虑每段数的贡献,对于 \(a_{n, j}\)\(a_{k, i}\) 的贡献系数显然为 \(\dbinom{n-k}{j-i}\)。证明可以打表,你会观察到杨辉三角的结构。

然后对于一段 \((x, c), a_{n, l} = a_{n, l + 1} = \dots = a_{n, r}\),显然总贡献为 \(\sum\limits_{j=l}^r \dbinom{n - k}{j - i}\) 这就变成了组合数前缀和问题,参见
P4345

考虑到现在时间复杂度是 \(\mathcal{O}(mk \log_p^2 n)\) 的,有点慢,但是我们发现 \(p\) 真的很小,我们可以先拿某个 \(p^k\) 做模数,满足 \(\log_{p^k}^2 n\) 尽量小,取 \(k = 3, p^k = 2401\),这时 Lucas 定理算组合数也变成了 \(\mathcal{O}(1)\) 的。时间复杂度 \(\mathcal{O}(mk + p^{2k})\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
// typedef __int128 i128;
typedef pair<int, int> pii;
const int N = 5e5 + 10, p = 7, mod = 2401;
template<typename T>
void dbg(const T &t) { cout << t << endl; }
template<typename Type, typename... Types>
void dbg(const Type& arg, const Types&... args) {cout << arg << ' ';dbg(args...);
}
namespace Loop1st {
int C[mod][mod], s[mod][mod], ans[N], las[N];
int lucas(int n, int m) { return C[n / mod][m / mod] * C[n % mod][m % mod] % p; }
int f(int n, int k) {if (k < 0) return 0;if (!n || !k) return 1;if (n < mod) return s[n][min(n, k)];return (f(n / mod, k / mod - 1) * s[n % mod][mod - 1] + lucas(n / mod, k / mod) * s[n % mod][k % mod]) % p;
}
void init(int n) {for (int i = 0; i <= n; i++) {C[i][0] = 1;s[i][0] = 1;for (int j = 1; j <= i; j++) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % p;for (int j = 1; j <= n; j++) s[i][j] = (s[i][j - 1] + C[i][j]) % p;}
}
void main() {int n, m, k;cin >> n >> m >> k;for (int x, c, l = 1, r = 0; m--; l = r + 1) {cin >> x >> c;r = l + c - 1;for (int i = 1; i <= k; i++) {int L = max(0, l - i), R = min(n - k, r - i);if (L <= R) {int tmp = f(n - k, R);ans[i] = (ans[i] + x * (tmp + p - las[i])) % p;las[i] = tmp;}}}for (int i = 1; i <= k; i++) cout << ans[i] << " \n"[i == k];
}}
int main() {// freopen("data.in", "r", stdin);// freopen("data.out", "w", stdout);ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);Loop1st::init(mod - 1);int T = 1;// cin >> T;while (T--) Loop1st::main();return 0;
}
http://www.jsqmd.com/news/318742/

相关文章:

  • UNIX域套接字
  • AI大模型这么火爆!程序员有必要学习吗?大厂面试官都在问了!
  • 2026铝板铝型材厂家综合评测(附优选名单)|采购避坑,适配多行业
  • Redis+cpolar,高效、自由的数据访问方法
  • 双闭环PID控制Buck变换器的仿真探索
  • 运用Java将HTML内容转换为Word文档
  • 学习记录260129
  • 基于nerdctl+BuildKit+containerd构建容器镜像
  • vulnstack红队实战二
  • 英伟达推出合成数据集支持新加坡AI发展
  • AI元人文构想:证成
  • 谷歌联合打击全球最大住宅代理网络IPIDEA
  • OS55.【Linux】System V消息队列的简单了解
  • 2026国内外主流大模型全景对比:技术演进与场景适配深度解析
  • 38-mini-vue 实现解析 element
  • Java零基础必看,1小时搞定微服务,从0到1搭建springcloud+nacos实战项目,搞定企业刚需技术!
  • 第6章:字符设备驱动的高级操作1:ioctl 系统调用
  • SQL 注入攻防进阶
  • 让 Q 值估计更准确:从 DQN 到 Double DQN 的改进方案
  • 《贾子智慧理论体系:从认知到文明的统一框架》| Kucius Wisdom Framework: A Unified Framework from Cognition to Civilization
  • 使用Dockerfile构建Flask应用镜像
  • vulnstack红队实战一
  • 全球首次突破异形框定位难题,百度开源全新OCR模型 PaddleOCR-VL-1.5
  • 智能指针详解
  • PVE 9.0 定制 Debian 13 镜像 支持 Cloud-Init 敏捷部署虚拟机【模板篇】
  • Java面试中的异常继承难题:自定义Exception避坑指南
  • Spring Boot的项目创建
  • 小程序毕设项目推荐-基于SpringBoot的医院设备管理及报修系统微信小程序基于springboot的医院设备管理及报修小程序的设计与实现【附源码+文档,调试定制服务】
  • 小程序毕设选题推荐:基于springboot的医院设备管理及报修小程序的设计与实现基于微信小程序的医院设备管理及报修系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 基于SpringBoot的房屋租售系统毕业论文+PPT(附源代码+演示视频)