对于当前班级状态$S$,定义一个函数$\varphi(S)$,要求其满足:

令结束状态为$S_{end}$,对于任意$S\ne S_{end}$,若其下一个状态为$S'$,则$E(\varphi(S)-\varphi(S'))=1$

由此,归纳即可得到$S$的期望结束步数为为$\varphi(S)-\varphi(S')$

对于一个状态$S$,注意到其与班级编号无关,因此不妨假设其第$i$个班级有$a_{i}$个人(共$m$个班级),再定义一个函数$g(x)$,令$\varphi(S)=\sum_{i=1}^{m}g(a_{i})$

由于为空的班级不影响状态,因此$g(0)=0$

更进一步的,根据$E(\varphi(S)-\varphi(S'))=1$,可得
$$
\frac{1}{2}\sum_{i=1}^{m}\frac{a_{i}}{n}(\Delta_{g}(a_{i}-1)-g(1))+\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\frac{a_{i}a_{j}}{n^{2}}(\Delta_{g}(a_{i}-1)-\Delta_{g}(a_{j}-[i=j]))=1
$$
(其中$\Delta_{g}(x)=g(x+1)-g(x)$)

后者在$i=j$时为0,在$i\ne j$时将两个枚举拆开,即
$$
\frac{1}{2}\sum_{i=1}^{m}\frac{a_{i}}{n}(\Delta_{g}(a_{i}-1)-g(1))+\frac{1}{2}\sum_{i=1}^{n}\frac{a_{i}(n-a_{i})}{n^{2}}(\Delta_{g}(a_{i}-1)-\Delta_{g}(a_{i}))=1
$$
将其整理后,即
$$
\sum_{i=1}^{m}\frac{a_{i}}{2n}[(2-\frac{a_{i}}{n})\Delta_{g}(a_{i}-1)-(1-\frac{a_{i}}{n})\Delta_{g}(a_{i})-g(1)]=1
$$
当对于每一个$a_{i}$,中括号内的值恰为$2$时,根据$\sum_{i=1}^{m}a_{i}=n$,即成立

令$g(1)=-2$,再化简后即可得到$\Delta_{g}(x)$
$$
\Delta_{g}(x)=\frac{2n-x}{n-x}\Delta_{g}(x-1)=\prod_{i=1}^{x}\frac{2n-i}{n-i}\Delta_{g}(0)
$$
根据$g(0)=0$以及$g(1)=-2$,可得初始状态$\Delta_{g}(0)=-2$

由此,可得$g(x)=g(0)+\sum_{i=0}^{x-1}\Delta_{g}(i)=-2\sum_{i=0}^{x-1}\prod_{j=1}^{i}\frac{2n-j}{n-j}$,问题即求$\sum_{i=1}^{m}g(a_{i})-g(n)$

之后暴力$o(n)$计算即可,为了避免每一次求逆,需要用分数的形式计算,以及使用”GNU G++17 9.2.0(64 bit,msys 2)​“的编译器即可通过

标算做到了$o(\sqrt{n}\log n+m\sqrt{n})$的复杂度,可以看cf上的题解

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define M 1005
4 #define mod 998244353
5 #define ll long long
6 int n,m,x,ans,a[M];
7 ll qpow(int n,int m){
8 ll s=n,ans=1;
9 while (m){
10 if (m&1)ans=ans*s%mod;
11 s=s*s%mod;
12 m>>=1;
13 }
14 return ans;
15 }
16 ll g(int x){
17 ll s1=1,s2=1,ans1=0,ans2=1;
18 for(int i=1;i<=x;i++){
19 ans1=(s1*ans2+s2*ans1)%mod;
20 ans2=s2*ans2%mod;
21 s1=s1*(2*n-i)%mod;
22 s2=s2*(n-i)%mod;
23 }
24 return (mod-2)*ans1%mod*qpow(ans2,mod-2)%mod;
25 }
26 int main(){
27 scanf("%d",&m);
28 for(int i=1;i<=m;i++){
29 scanf("%d",&a[i]);
30 n+=a[i];
31 }
32 for(int i=1;i<=m;i++)ans=(ans+g(a[i]))%mod;
33 printf("%d",(ans+mod-g(n))%mod);
34 }

[cf1479E]School Clubs的更多相关文章

  1. “北航Clubs”功能规格说明书

    1.项目目标说明: 北航Clubs的初衷是服务社团,服务学生,满足社团与学生的信息互通的需求.社团管理运营方便的需求. 建设网站的目的是使学生可以在一个权威可信的网站上获取到社团实时的动态,社团活动的 ...

  2. “北航Clubs”项目汇报

    一.项目展示 二.用户的痛点与需求 1.北航学生,在百团大战之后,很难再有渠道加入社团,了解社团活动,简直如蒙在鼓里! 2.当你周末想参加一些活动,充实一下枯燥的求学生活时,却发现不知道有哪些社团有活 ...

  3. “北航Clubs” Alpha版发布!

    一.功能 1.获取活动信息: 用户进入网站后,第一眼就可以查看到近期活动 2.查看活动详情 点击活动标题,可以进入活动详情页面 3.注册功能 首页点击注册,输入学号.密码.姓名.手机号即可完成注册 4 ...

  4. “北航Clubs” Beta版本开发目标

    Beta版本开发目标 总体设想:修复Alpha版本中的若干bug,并在Alpha版本成果之上进行进一步开发,实现社员管理.评论.站内信等功能. 1.对Alpha版本功能的更新与加强 后端实现从SQLi ...

  5. java转换 HTML字符实体,java特殊字符转义字符串

    为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...

  6. 【转载学习前辈的经验】-- Mistakes I made (as a developer) 我(作为一名开发者)所犯过的错误

    我 2006 年开始工作,至今已经 10 年.10 年是个里程碑,我开始回顾自己曾经犯过的错误,以及我希望从同行那里得到什么类型的忠告.一切都在快速改变,10 年了,我不能确定这些秘诀是否还有用. 不 ...

  7. HTML CSS 特殊字符表(转载)

    转载地址:http://blog.csdn.net/bluestarf/article/details/40652011 转载原文地址:http://zhengmifan.com/news/noteb ...

  8. C++-数据库【1】-C++连接MSSQL数据库

    测试环境—— 系统:Win7 64bit 编译器:VC++ 2015 数据库:MSSQL 2008 R2 #include <Windows.h> #include <stdio.h ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (23) -----第五章 加载实体和导航属性之预先加载与Find()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-2  预先加载关联实体 问题 你想在一次数据交互中加载一个实体和与它相关联实体. ...

随机推荐

  1. python paramiko实现ssh上传下载执行命令

    paramiko ssh上传下载执行命令 序言 最近项目经常需要动态在跳板机上登录服务器进行部署环境,且服务器比较多,每次完成所有服务器到环境部署执行耗费大量时间.为了解决这个问题,根据所学的执行实现 ...

  2. .NET 开发一个服务器 应用管理工具

    一:背景 1.Anno.Deploy Anno.Deploy可以和 Anno集成使用,用于部署新的服务.启动服务.停止服务.清理服务.也可以单独使用,用于守护程序. 使用方法 1.和Anno集成使用 ...

  3. 手把手教你 Docker部署可视化工具Grafana

    一.Grafana的简单介绍 Grafana是开源的.炫酷的可视化监控.分析利器,无论您的数据在哪里,或者它所处的数据库是什么类型,您都可以将它与Grafana精美地结合在一起.它还有丰富的套件供您选 ...

  4. 痞子衡嵌入式:i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同. 因为 i.MXRT 全系列 ...

  5. $\text {FWT}$学习笔记

    \(\text {FWT}\) 学习笔记 正常项的\(\text {FWT}\) 在\(\text {OI}\)中,我们经常会碰到这种问题: 给出一个长度为\(n\)的序列\(a_{1,2,...,n ...

  6. FastAPI 学习之路(八)路径参数和数值的校验

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  7. GAN实战笔记——第一章GAN简介

    GAN简介 一.什么是GAN GAN是一类由两个同时训练的模型组成的机器学习技术:一个是生成器,训练其生成伪数据:另一个是鉴别器,训练其从真实数据中识别伪数据. 生成(generative)一词预示着 ...

  8. 联想SR658安装显卡驱动【NVIDIA Tesla V100】

    1. 安装基础依赖环境 yum -y install gcc kernel-devel kernel-headers 2.查看内核和源码版本是否一致 查看内核版本: ls /boot | grep v ...

  9. PinPoint单节点部署及客户端配置方法

    在一次做项目中,需要涉及全链路压测,为了更好定位链路中某一节点可能会出现的问题,在繁忙之余,快速部署及应用了该链路工具,分享给大家~ 话不多说,开始部署~ 一.环境配置1.1 获取需要的依赖包进入ho ...

  10. 使用flink实现一个简单的wordcount

    使用flink实现一个简单的wordcount 一.背景 二.需求 三.前置条件 1.jdk版本要求 2.maven版本要求 四.实现步骤 1.创建 flink 项目 2.编写程序步骤 1.创建Str ...