尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CCPC郑州站 笨蛋题 II

CCPC郑州站 笨蛋题 II
📅 发布时间:2026/6/20 3:46:58
我需要我的热情像当初一样 需要热爱需要最单纯的那份专注

yr说他们队这题A了就Au了,可惜

离散数学太无聊了,课上想的。xd半节课就切了,我想了两节课才会,做法好像不太一样。

我做计数推式子的时候总是不太流畅,感觉还是不太专注导致的。

Sol

考虑一个具体的前缀最大值方案 \(s = \array{a_1,a_2,...,a_{|s|}}\),要如何计算有多少个排列的前缀最大值方案是 \(s\)

对于 \(s\),特别地,我们钦定 \(a_0 = 0\),\(a_{|s|} = n\),我们现在考虑非前缀最大值的数要怎么放,我们尝试从后往前计算。

具体地,依次从后往前考虑 \(1\leq i \leq |s|\),\((a_{i-1},a_i)\) 里面的每一个数,\((a_{i-1},a_i)\) 里面的数只能够放到 \(a_i\) 后面,放在 \(a_i\) 后面也不会影响到后面的前缀最大值。

那么对于 \((a_{i-1},a_i)\) 它的贡献系数就是 :

\[\binom{n-a_{i-1}-1}{a_i-a_{i-1}-1}(a_i-a_{i-1}-1)! = \frac{(n-a_{i-1}-1)!}{(n-a_i)!} \]

那么所有 \(i\) 的系数乘起来就是关于这个方案的排列个数:

\[\frac{(n-1)!}{\Pi_{i=1}^{|s|-1}(n-a_i)} \]

现在我们计算这个方案出现的期望次数,也就是算这个方案出现的概率,我们记上面计算出的关于 \(s\) 的方案数为 \(f(s)\):

\[1-(\frac{n!-f(s)}{n!})^k = 1-(1-\frac{f(s)}{n!})^k = 1-(1-\frac{1}{\Pi_{i=0}^{|s|-1}(n-a_i)})^k \]

因为除以 \((n-1)!\) 后变成了 \(\frac{1}{n}\),前文有定义 \(a_0 = 0\),所以相当于从 \(i=0\) 开始计算了。

所以答案就是:

\[\sum_{s} 1-(1-\frac{1}{\Pi_{i=0}^{|s|-1}(n-a_i)})^k = 2^{n-1}-\sum_{s} (1-\frac{1}{\Pi_{i=0}^{|s|-1}(n-a_i)})^k \]

现在好像没什么思路了,因为式子没有可以继续化简的地方,此时的形式也不能够让我们直接处理,因为那个 \(k\) 次方,所以考虑对于后面那部分二项式展开:

\[\begin{align} \sum_{s} (1-\frac{1}{\Pi_{i=0}^{|s|-1}(n-a_i)})^k \\ = \sum_{i=0}^{k}\binom{k}{i}\sum_{s}(-\frac{1}{\Pi_{j=0}^{|s|-1}(n-a_j)})^i \\ = \sum_{i=0}^{k}\binom{k}{i}(-1)^i\sum_{s}\frac{1}{\Pi_{j=0}^{|s|-1}(n-a_j)^i} \end{align} \]

对于最后一个和式那里,容易发现这个只和 \(i\) 有关,并且对于同一个 \(i\) ,这个式子的结果容易用递推直接求出来,具体的,设 \(g(i,j)\) 表示 \(i\) 次方,当前 \(s\) 的最后一个元素是 \(j\)(前缀最大值是递增的),上述式子的值是多少,简单dp即可,下面是代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
#define db double
const ll N = 5005,mod = 998244353;
ll n,k,C[N][N],pw2[N],f[N][N],g[N][N],s[N][N],h[N]; 
ll qpow(ll a,ll p){ll res = 1;for(;p;p>>=1,a=a*a%mod) if(p&1) res = res*a%mod;return res;
}
void solve(){cin >> n >> k;pw2[0] = 1;for(int i=1;i<=n;i++) pw2[i] = pw2[i-1]*2%mod;C[0][0] = 1;for(int i=1;i<=k;i++){C[i][0] = 1;for(int j=1;j<=i;j++){C[i][j] = C[i-1][j]+C[i-1][j-1];if(C[i][j] >= mod) C[i][j] -= mod;}}for(int i=1;i<=n;i++){f[i][0] = 1;ll inv = qpow(i,mod-2);for(int j=1;j<=k;j++){f[i][j] = f[i][j-1]*inv%mod;}}for(int i=0;i<=k;i++){if(i) h[i] = g[i][0] = f[n][i];else h[i] = g[i][0] = 1;for(int j=1;j<n;j++){g[i][j] = h[i]*f[n-j][i]%mod;h[i] = (h[i]+g[i][j])%mod; }}ll ans = 0;for(int i=0;i<=k;i++){if(i&1) {ans = ans+(mod-C[k][i]*h[i]%mod);ans %= mod;}else{ans = ans+C[k][i]*h[i]%mod;ans %= mod;}}ans = pw2[n-1]-ans;ans = (ans%mod+mod)%mod;cout << ans << '\n';
}
int main(){cin.tie(0),cout.tie(0);ios::sync_with_stdio(0);int T = 1;
//	cin >> T;while(T--) solve();return 0;
}

容易发现这题本质上就是一道计算题,熟能生巧。

相关新闻

  • qy_蓝桥杯编程系列_编程17 好数
  • 74_基于深度学习的垃圾桶垃圾溢出检测体系(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 【RAG安全】Pirates of the RAG: Adaptively Attacking LLMs to Leak Knowledge Bases - 指南

最新新闻

  • 麻省理工研究人员打造 Fractal 操作系统,获苹果 M1 芯片新发现
  • React写的WebVR全景看房跳转demo,带贝壳式热点导航和视角控制
  • 2026年郑州脚手架搭建公司推荐:钢管脚手架/盘口脚手架搭建拆除、室内外装修架子搭设、脚手架租赁施工怎么选 - 海棠依旧大
  • 从PHP一句话木马到Webshell大马:攻防原理与实战防御指南
  • BepInEx IL2CPP启动失败:技术原理与完整解决方案指南
  • Elastic 被评为 IDC MarketScape《2026 年全球 SIEM 厂商评估》领导者

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号