Public NOIP Round #1 Div.1 CD

news/2025/3/22 21:56:18/文章来源:https://www.cnblogs.com/XP3301Pipi/p/18787189

Public NOIP Round #1 Div.1

Problem C. 波特分组

\(S=\sum k_i\)

\(O(n\sqrt{S}+S)\) Solution

将硬币正面记为 \(1\),反面记为 \(0\)

首先概率转计数:求有多少个 01 序列,能够使得这 \(k\) 个波特分到一个组里。

为了方便,我们可以钦定这些波特都要分到 A 组中,最终答案再乘以 \(2\)

我们设最后一个被分到 A 组中的波特为 \(pa\),最后一个被分到 B 组中的波特为 \(pb\)。设 \(p=\min(pa,pb)\),那么 \(p\) 之后的位置,无论是 \(0\) 还是 \(1\),都会被分到另一个组里面。

那么我们对 \(p\) 进行分类讨论:

  1. \(p=pa\)\([p+1,n]\) 中的波特都会被分到 B 组。显然需要满足 \(p\geq b_k\)

    进一步分类:

    • \(p=b_k\)。由于 \(k\) 个指定的波特必须分到 A 组,那么还需要将剩下的 \(n-k\)\(1\) 填入 \(b_k-k\) 个位置里面。方案数为 \(\binom{b_k-k}{n-k}\times 2^{2n-p}\)
    • \(p>b_k\)\(p\) 这个位置必须填 \(1\),那么还要将剩下的 \(n-k-1\)\(1\) 填入 \(p-k-1\) 个位置里面。方案数为 \(\binom{p-k-1}{n-k-1}\times 2^{2n-p}\)
  2. \(p=pb\)\([p+1,n]\) 中的波特都会被分到 A 组。需要满足 \(p\ne b_i\)

    我们可以增加两个点 \(b_0=0,b_{k+1}=2n\)

    如果一个 \(p\) 满足 \(b_i<p<b_{i+1}\),那么要将剩下的 \(n-1\)\(0\) 填入 \(p-i-1\) 个位置里面,方案数为 \(\binom{p-i-1}{n-1}\times 2^{2n-p}\)

注意 \(p\ne 2n\),因为 \(\min(pa,pb)\) 一定小于 \(2n\)

对于情况 2,我们可以将式子化为 \(\binom{p-i-1}{n-1}\times 2^{2n-(p-i)}\times 2^{-i}\),处理出 \(\binom{x-i}{n-1}\times 2^{2n-x}\) 的前缀和即可。

对于情况 1,不同的 \(k\) 不会超过 \(O(\sqrt{S})\) 量级,所以我们对每个 \(k\) 分别处理前缀和即可。

int n,Q;const ll mod=998244353,inv2=(mod+1)>>1;inline ll Mod(ll x){return (x>=mod)?(x-mod):(x);}inline void Add(ll &x,ll y){x=Mod(x+y);}ll fac[N],caf[N],pw[N],wp[N];ll QuickPow(ll x,ll y){ll res=1;while(y){if(y&1) res=res*x%mod;x=x*x%mod; y>>=1;}return res;
}void Init(){fac[0]=caf[0]=1;for(int i=1;i<=(n<<1);i++) fac[i]=fac[i-1]*i%mod;caf[n<<1]=QuickPow(fac[n<<1],mod-2);for(int i=(n<<1)-1;i;i--) caf[i]=caf[i+1]*(i+1)%mod;pw[0]=wp[0]=1;for(int i=1;i<=(n<<1);i++) pw[i]=Mod(pw[i-1]<<1),wp[i]=wp[i-1]*inv2%mod;
}inline ll C(int x,int y){if(x<0||y<0||x<y) return 0;return fac[x]*caf[y]%mod*caf[x-y]%mod;
}namespace Subtask1{int k[N],c[N],m;vector<int> q[N];ll f[850][N],g[N];void Solve(){Init();for(int i=1;i<=Q;i++){read(k[i]); c[i]=k[i];q[i].push_back(0);for(int j=1;j<=k[i];j++){int x; read(x);q[i].push_back(x);}q[i].push_back(n<<1);}sort(c+1,c+Q+1);m=unique(c+1,c+Q+1)-c-1;for(int i=1;i<=m;i++){for(int j=n;j<(n<<1);j++)f[i][j]=Mod(f[i][j-1]+C(j-c[i]-1,n-c[i]-1)*pw[2*n-j]%mod);}for(int i=n;i<(n<<1);i++)g[i]=Mod(g[i-1]+C(i-1,n-1)*pw[2*n-i]%mod);for(int i=1;i<=Q;i++){int tk=lower_bound(c+1,c+m+1,k[i])-c;ll ans=0;for(int j=0;j<(signed)q[i].size()-1;j++){if(q[i][j]==2*n) continue;int L=q[i][j]+1-j,R=q[i][j+1]-1-j;ll res=Mod(g[R]-g[L-1]+mod)*wp[j]%mod;Add(ans,res);}if(q[i][k[i]]!=n*2){Add(ans,C(q[i][k[i]]-k[i],n-k[i])*pw[2*n-q[i][k[i]]]%mod);Add(ans,Mod(f[tk][(n<<1)-1]-f[tk][q[i][k[i]]]+mod));}ans=Mod(ans<<1)*QuickPow(pw[n<<1],mod-2)%mod;printf("%lld\n",ans);}}
}signed main(){read(n),read(Q); Init();Subtask1::Solve();return 0;
}

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

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

相关文章

浅说线性差分和树上差分

目录线性差分正常思路差分思路二维差分的定义二维差分的解释例题1 地毯树上差分引入点差分例题1——wwx的出玩分析与解答例题2——松鼠的新家分析与解答边差分例题1——边差分模版分析与解答例题2——运输计划分析与解答 线性差分 当我们这里有\(n\)个数,现在我要对其中一段进…

Spring 事务失效

场景1:代码:执行结果:异常抛出,但是数据没有回滚。 代理对象调用 b() 方法 没有开启事务:普通对象调用a() 方法开启事务:在b() 方法上加入事务注解,开启事务就没问题:本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/18787133

征程 6X CAMSYS 性能测试方案介绍

1.性能测试方法原理 CAMSYS 其性能指标主要包括:帧率、延迟,以及系统的 DDR 带宽、CPU 占用率等。 对于帧率、延迟,通过在驱动中创建 trace event,分别记录通路上的每个 IP,每帧开始处理(frame_start)和结束处理(frame_end)的时间戳信息和帧信息,来实现帧率计算和延迟…

数据结构2

概率论与数理统计1-基本概念 概率论与数理统计2-基本数据结构 概率论与数理统计3-基本数据处理技术 基本的数据结构 - 数据结构- 数据的逻辑结构- 线性结构- 线性表- 栈(特殊的线性表)- 队列(特殊的线性表)- 字符串- 数组- 广义表- 非线性结构- 树型结构- 图型结构- 数据的存储…

day7 刷牛客华为机试题+学java

https://www.nowcoder.com/exam/oj/ta?page=1&tpId=37&type=37 字符串 第一题:第二题: 省行版:逻辑版:java网课学习: 多态调用成员变量,编译看左边,运行也看左边。调用成员方法时,编译看左边,运行看右边。if(a instanceof Dog d) 导包final 修饰引用类型地址…

【Docker】MySQL、Reids、Mongodb、Nacos、RabitMQ安装指南

1 docker的下载 建议通过 火绒应用商店 或者 联想应用商店 下载 2 配置Docker 配置镜像站 https://docker.1panel.live {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": fa…

Web前端入门第 22 问:CSS 选择器一览

HTML 在语法上并无大小限制,所以其结构可以浩瀚无边,CSS 选择器的作用则是在这些复杂的 HTML 结构中进行元素定位。 示例代码 记住此代码,后面所有的 css 选择器都是基于此代码。 注意:代码中存在两个一样的 id="p1" 元素,仅为了演示效果,正常编码中请保证 id …

曼哈顿距离和切比雪夫距离

曼哈顿距离(Manhattan Distance) 解释:只能横着或竖着走,坐标上两点的距离 假设存在两点 \(A(x_1, y_1)\) \(B(x_2, y_2)\) \(dis(A, B) = |x_1 - x_2| + |y_1 - y_2|\)对于上方求曼哈顿距离的式子,有四种情况 \( \begin{cases} x_1 > x_2 & y_1 > y_2 & {…

如何设置家用威联通 NAS UPS 断电后自动关机并通知其他设备?

场景📝备注: 求轻喷, 求放过. 😅 我真的是个理线方面的白痴. 这已经是我的极限了. 😂我的家庭实验室 Homelab 服务器集群配置如下.上半部分之前已经介绍过了, 这里就不再赘述了. 今天重点介绍介绍 UPS 和 NAS 部分.1台 UPS, 型号为 APC Back-UPS 650. 插座插着: NAS 和 插…

[扫描线] 数据结构测试(2025.3.22)

暴力大赛,赛时暴力打满喜提80pts,可惜T1没想到暴力。 难度:T2<T1<T3.T1 第1题 团队 查看测评数据信息有n个工人,第i个工人的能力是v[i], 他只与能力在L[i]到R[i]之间的人在一起工作,问最多能选出多少人在一起工作。输入格式第一行,一个整数n, 1 <= n <…

centOS 上部署hadoop+mysql+hive 服务之hadoop安装

以下安装的hadoop版本是3.3.6 ,由于hadoop是运行于java环境,因此,需要提前安装java jdk并配置环境变量。 jdk的安装及配置: jdk8 国内下载路径:https://repo.huaweicloud.com/java/jdk/8u202-b08/ 可根据实际需要选择对应的jdk版本 1、下载jdkwget https://repo.huaweicl…

创建django视图和路由

第一个视图 from django.shortcuts import render from django.http import HttpResponse# Create your views here. def hello(request):msg = Hello World!!!return HttpResponse(msg)第一个路由 from django.urls import path from .views import hellourlpatterns = [path(…