2024.10.7 鲜花

news/2025/3/1 7:36:24/文章来源:https://www.cnblogs.com/xrlong/p/18450573

【UNR #3】百鸽笼

花の塔
君が持ってきた漫画
くれた知らない名前のお花
今日はまだ来ないかな?
初めての感情知ってしまった
窓に飾った絵画をなぞってひとりで宇宙を旅して
それだけでいいはずだったのに
君の手を握ってしまったら
孤独を知らないこの街には
もう二度と帰ってくることはできないのでしょう
君が手を差し伸べた 光で影が生まれる
歌って聞かせて この話の続き
連れて行って見たことない星まで
誰の手も声も届かない
高く聳え立った塔の上へ
飛ばすフウセンカズラ
僕は君に笑って欲しいんだ
満たされない穴は惰性の会話や澄ましたポーズで
これまでは埋めてきたけど
退屈な日々を蹴散らして
君と二人でこの街中を泳げたら
それはどれだけ素敵なことでしょう?
出したことないほど大きな声でやっと君に伝わる
歪なくらいがさ きっとちょうどいいね
世界の端と端を結んで
窓に飾った絵画をなぞってひとりで宇宙を旅して
それだけでも不自由ないけど
僕は選んでみたいの
高鳴る心 謎だらけの空を
安全なループを今、書き換えて!
君の手を握ってしまったら
孤独を知らないこの街にはもう二度と
帰ってくることはできないのでしょう
いくらでも迷いながら光も影も見に行こう
歌って聞かせてこの話の続き
連れて行って見たことない星まで
世界の端と端を結んで

愿天堂没有疾病和伤痛

好题。

首先转化,每次从还有剩余的笼中选实在抽象,考虑可以继续放进去,只是没有贡献。

于是将题面转化为:给定一个无限长的序列,其元素是每堆鸽笼编号,对于每个 \(i\in[1,n]\),求对于所有 \(j\not=i\),第 \(a_j\)\(j\) 出现在第 \(a_i\)\(i\) 之前的概率(其实是每个 \(i\) 从中选出前 \(a_i\) 个组成鸽笼)。

设当前处理的鸽笼编号为 \(i\)

考虑容斥,枚举子集,设 \(f(S)\) 为恰好 \(S\) 的集合出现在 \(a_i\) 之后的概率,\(g(S)\) 为钦定(至少),有。

\[g(S)=\sum_{S\subseteq N} (-1)^{|N|-|S|} j(N) \]

\[ans=f(\varnothing)=\sum_{S} (-1)^{|S|} g(S) \]

考虑求 \(g(S)\),设 \(dp_{i,j}\) 表示从 \(S\) 中选到前 \(i\) 个,一共长度为 \(j\) 的方案数,枚举第 \(i\) 个选 \(k\) 个,背包显然转移。

因为是有序的,记得在转移时乘上 \(\frac{1}{k!}\),乘上 \(j!\),还要记得乘上 \(a_i-1\) 的插板。

有了方案数,概率显然是 \(\sum\limits_i \frac{dp_{n,i}}{n^i}\)

这样已经有了 \(30pts\) 做法。

考虑去掉指数,考虑转移过程,发现其只和 \(|S|\) 有关,考虑多加一位 \(dp_{l,i,j}\) 表示一共选了 \(l\) 堆笼子,枚举第 \(l\) 个是否选和选了多少来转移(相当于是把 \(|S|\) 相同的一起转移),依然是类似背包转移。

这里已经是 \(n^6\) 的做法了,但是不好过,考虑经典 trick 可退回背包,可以做到 \(n^5\)

Code
#include<bits/stdc++.h>
using namespace std;
using llt=long long;
using llf=long double;
using ull=unsigned long long;
#define endl '\n'
#ifdef LOCALFILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/out.out","w",stdout);
#elseFILE *InFile=stdin,*OutFile=stdout;
#endifconst int N=33,MOD=998244353;
int c[N],n,m,fac[N*N],ivf[N*N],dp[N][N*N];int Fpw(int a,int b){int ans=1;while(b){if(b&1) ans=1ll*ans*a%MOD;a=1ll*a*a%MOD,b>>=1;}return ans;
}
int Inv(int a){return Fpw(a,MOD-2);}
int C(int a,int b){return 1ll*fac[a]*ivf[b]%MOD*ivf[a-b]%MOD;}void Del(int i){for(int l=1;l<=n;++l) for(int j=0;j<=m;++j) for(int k=0;k<=min(j,c[i]-1);++k)dp[l][j]=(dp[l][j]-1ll*dp[l-1][j-k]*ivf[k]%MOD+MOD)%MOD;
}
void Add(int i){for(int l=n;l;--l) for(int j=m;j>=0;--j) for(int k=0;k<=min(j,c[i]-1);++k)dp[l][j]=(dp[l][j]+1ll*dp[l-1][j-k]*ivf[k])%MOD;
}
int main(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);cin>>n; for(int i=1;i<=n;++i) cin>>c[i],m+=c[i];fac[0]=1; for(int i=1;i<=m;++i) fac[i]=1ll*fac[i-1]*i%MOD;ivf[m]=Inv(fac[m]); for(int i=m;i;--i) ivf[i-1]=1ll*ivf[i]*i%MOD;dp[0][0]=1; for(int i=1;i<=n;++i) Add(i);for(int nw=1;nw<=n;++nw){Del(nw); int ans=0;for(int j=0;j<n;++j){int tmp=0;for(int k=0;k<=m-c[nw];++k) tmp=(tmp+1ll*dp[j][k]*fac[k]%MOD*C(c[nw]+k-1,k)%MOD*Inv(Fpw(j+1,k+c[nw]))%MOD)%MOD;ans=((ans+tmp*((j&1)?-1:1))%MOD+MOD)%MOD;}cout<<ans<<' ';Add(nw);}
}
图,话说为什么这么多人喜欢用多个折叠,这个东西可以直接 F12 一键展开的 QwQ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809607.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云平台系统(附配置告警至QQ、钉钉)

目录一、机器规划二、部署安装 node-exporter、prometheus、Grafana、kube-state-metrics1、创建 monitor-sa 命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据3、k8s 集群中部署 prometheus3.1、创建一个 sa 账号3.2、将 sa 账号 m…

软件工程第二次结对作业

软件工程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281作业目标 基于第一次结对作业项目程序的实现学号 102201127合作伙伴 102201129项目分工: 102201129周鑫: 前端开发: 设计和实现用户界面。 确保界面响…

20241007

sequence 我们会发现,我们每次删的一定是长度最短的那个,所以我们可以最开始按照长的排一下序,然后用线段树维护每一个区间中还有几个数,每次加上答案后在两个端点打上标记即可 #include <bits/stdc++.h> #define _1 (__int128)1using namespace std; using ll = long lo…

软件工程week2课程作业|“物品复活“软件开发

“物品复活”软件开发 作业要求 大学生经常有些物品觉得扔掉可惜,不处理又觉得浪费自己的地方。请你编写一个物品“复活”软件 该程序允许添加物品的信息(物品名称,物品描述,联系人信息),删除物品的信息,显示物品列表,也允许查找物品的信息 你实现的程序可以采用命令行…

[42] (多校联训) A层冲刺NOIP2024模拟赛03

今天的乐子今天的乐子2 昨天晚上做梦 梦见自己被关进戒网瘾学校 里面的老师全和疯子一样 然后我和这帮疯子老师比疯 疯子老师发现他们没我疯 所以就把我放了今天的乐子3 lhx 罗曼蒂克的辟谷A.五彩斑斓 赛时的想法 \(n^4\) 的做法,设 \(f_{i,j,k,l}\) 表示以 \((i,j)\) 为左上角…

Metasploit渗透测试框架学习(一)基本使用教程

1.Metasploit框架结构 1.1总览基础库文件Rex为最底层,实现网络套接字、网络应用协议、客户端服务端交互、数据库支持等 framework-core实现与上层模块交互的接口 framework-base对framework-core的扩展封装,用于提供各种接口供用户调用基于framework-base实现的六大模块Explo…

统计学(十三)——相关分析

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 相关分析是用于研究多个变量之间相互关系的统计方法,最早由英国统计学家卡尔皮尔逊(Karl Pearson)于1896年提出。皮尔逊通过对变量间线性关系的深入研究,…

前端模块化进化史:从全局 function 到 ES Modules

目前,前端开发已经离不开由 CommonJS、ES Modules 和 Webpack 构建的模块化开发环境。无论是 JavaScript、CSS、图片还是其他资源,都可以作为一个模块来处理。那么,模块化究竟是如何发展到今天的呢? 全局函数模式 最初的前端模块化尝试是通过 全局函数来实现的。例如,在一…

CF131C题解

贪心,优先队列,CF 2200传送门:https://codeforces.com/problemset/problem/134/C 关注到题目的两个限制:1. 一个人只能与另外同一人交换一张卡牌。2. 一个人只能交换自己原来颜色的卡牌。 对于2条限制条件,显然有贪心思路:尽量让更多的人手持原有的卡牌。对于当前待交换的…

『模拟赛』多校A层冲刺NOIP2024模拟赛03

『模拟赛记录』多校A层冲刺NOIP2024模拟赛03Rank 炸了,触底反弹A. 五彩斑斓(colorful) 签,又没签上。 考虑如何一步步优化暴力。最暴力的思想 \(\mathcal{O(n^4)}\) 枚举每个矩形,判断四个顶点颜色。稍微优化些,两次 \(\mathcal{O(n^2)}\) 跑出对于行/列每个点下一个与之…

加装spark-3.5.3

集群版本 hadoop-3.4.0 hive-3.1.3 zookeeper-3.9.2 hbase-2.6.0(1.0.0以上需要zookeeper-3.4.0以上) spark-3.5.3(只能选2.13.0) scala-2.13.0(jdk8仅支持x.x.0系)总结一下:JDK8和scala-2.13.0必选。1.安装scala 1.1 下载解压 tar zxvf scala-2.13.0.tgz 1.2 配置环境变…

高级程序语言第二次个人作业

高级程序语言第二次作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2024C/homework/13282学号 222200424姓名 赵伟豪编程练习3.13.23.33.43.53.63.73.8示例程序3.13.23.33.43.53.63.73.83.93.10总结与收获…