Educational Codeforces Round 186 C-F 个人题解

news/2026/1/16 22:22:29/文章来源:https://www.cnblogs.com/xzyNOIP/p/19494233

Educational Codeforces Round 186

C - Production of Snowmen

给定三个分别有 $n$ 个元素的环 $a,b,c$,现在要选择一个三元组 $(i,j,k),1\le i,j,k\le n$,使得 $(a_i,b_j,c_k),(a_{i+1},b_{j+1},c_{k+1}),\cdots,(a_{i+n-1},b_{j+n-1},c_{k+n-1})$ 都满足 $a<b<c$,问合法的三元组个数。

$1\le n\le 5\times 10^3$。

先考虑只有两个环的情况怎么做。

先断环为链,不难想到先 $O(n^2)$ 枚举起点再 $O(n)$ 比较,总共 $O(n^3)$。

但会发现有很多重复计算的东西。由于这玩意类似滑动窗口,考虑换一下枚举的东西,我们先枚举两个起点 $i,j$ 的距离 $dis$,然后再枚举 $i$。你会发现当我们的 $i$ 往后挪一位时,$j$ 也同步挪一位,此时刚好有一对数进入了我们的滑动窗口,有一对数出去了,那我们只需要比较出去的这对和进来的这对就行了。这样下来时间复杂度是 $O(n^2)$ 的。

于是我们可以求出来对于每个 $j$,合法的二元组 $(j,k),b_j<c_k$ 的个数,这里设为 $p_j$。我们对 $a$ 环和 $b$ 环施以同样的比较方式,如果有两个起点 $i,j$ 合法,我们为答案加上 $p_j$ 即可。

总时间复杂度 $O(n^2)$。

ll T;
ll n,a[N*2],b[N*2],c[N*2];
ll p[N*2];
void solve(){cin>>n;for(ll i=1;i<=n;i++) p[i]=0;for(ll i=1;i<=n;i++){ cin>>a[i]; a[i+n]=a[i]; }for(ll i=1;i<=n;i++){ cin>>b[i]; b[i+n]=b[i]; }for(ll i=1;i<=n;i++){ cin>>c[i]; c[i+n]=c[i]; }for(ll dis=0;dis<n;dis++){ll cnt=0;for(ll i=1;i<=n;i++){ll j=i+dis;if(b[i]>=c[j]) cnt++;}if(!cnt) p[1]++;for(ll i=2,j=dis+2;i<=n;i++,j++){if(b[i-1]>=c[j-1]) cnt--;if(j>n) j-=n;if(b[i+n-1]>=c[j+n-1]) cnt++;if(!cnt) p[i]++;}}for(ll i=1;i<=n;i++) p[i+n]=p[i];ll ans=0;for(ll dis=0;dis<n;dis++){ll cnt=0;for(ll i=1;i<=n;i++){ll j=i+dis;if(a[i]>=b[j]) cnt++;}if(!cnt) ans+=p[dis+1];for(ll i=2,j=dis+2;i<=n;i++,j++){if(a[i-1]>=b[j-1]) cnt--;if(j>n) j-=n;if(a[i+n-1]>=b[j+n-1]) cnt++;if(!cnt) ans+=p[j];}}cout<<ans<<"\n";
}

D - Christmas Tree Decoration

现在有 $n+1$ 个从 $0$ 编号到 $n$ 的盒子,每个盒子里有 $a_i$ 个装饰品。有 $n$ 个人,按照排列 $p$ 的顺序,从 $p_1$ 到 $p_n$ 依次轮流拿装饰品挂上去,第 $i$ 个人有两种选择:

  • 盒子 $0$ 里选一个礼物挂上去;
  • 盒子 $i$ 里选一个礼物挂上去。

如果没有出现一个人没有礼物可挂的情况,这个排列就是合法的,问合法的排列数,答案模 $998244353$。

$1\le T\le 5000,1\le n\le 50$。

你发现 $0$ 号盒子可以看作一个备用盒子嘛,低保金属于是。

于是发现,每次等到第 $i$ 个人对应的盒子里没有了再去拿 $0$ 号盒子里的东西,一定不劣,相当于按需所取。于是题意转化为,求轮空次数 $\le a_0$ 的排列数。

首先什么时候轮空次数最少?你会发现一定是 $p_i$ 按照 $a_{p_i}$ 从大到小的顺序排列,例如 3 3 2 1 1,你会发现这样子后面的 2 1 1 就可以少轮空一次。此时总轮空次数为
$$
p=\sum_{i=1,a_i<maxa}maxa-1-a_i
$$
其中 $maxa=\max a$。

因此我们先把 $a_1\sim a_n$ 排个序,这样不影响对答案的计数。

然后你会发现,每当有一个小于 $maxa$ 的元素被丢到 $maxa$ 的前面去,如 1 3 3 2 13 2 3 1 1,轮空次数就会加一,因此我们枚举轮空次数,设轮空次数最小值为上文的 $p$,小于 $maxa$ 的元素个数为 $nmx$,等于 $maxa$ 的元素个数为 $mx$,则方案数可以推出来:
$$
\sum_{i=p}^{\min(a_0,p+nmx)}\binom{nmx}{i-p}\cdot(mx-1+i-p)!\cdot mx\cdot (nmx-(i-p))
$$
意思是:

  • 最右边的 $maxa$ 元素之前的所有元素可以乱排;
  • 最右边的 $maxa$ 元素有 $mx$ 种选法;
  • 右边的数可以乱排。

时间复杂度 $O(Tn)$。

void solve(){cin>>n>>a0;fac[0]=1;for(ll i=1;i<=n;i++){cin>>a[i];fac[i]=fac[i-1]*i%P;}finv[n]=qpow(fac[n],P-2);for(ll i=n-1;i>=0;i--) finv[i]=finv[i+1]*(i+1)%P;sort(a+1,a+n+1,cmp);ll mxcnt=0,nmxcnt=0,bas=0;for(ll i=1;i<=n;i++){if(a[i]==a[1]) mxcnt++;else nmxcnt++,bas+=a[1]-1-a[i];}ll ans=0;for(ll i=0;i+bas<=a0&&i<=nmxcnt;i++) ans=(ans+C(i,nmxcnt)*mxcnt%P*fac[mxcnt-1+i]%P*fac[nmxcnt-i]%P)%P;cout<<ans<<"\n";
}

E - New Year's Gifts

看错题了。

小 M 有 $n$ 个朋友,他要给他的每个朋友送一份新年礼物,他已经给他们分别选好了礼物,价值为 $y_i$。

同时,现在有 $m$ 个免费的礼盒,每个礼盒颜值为 $x_i$,一个礼物可以选择包装,也可以不包装。

一个朋友会开心,以下条件满足其一即可:

  • 礼物价值至少 $z_i(z_i>y_i)$;
  • 礼盒颜值至少 $x_i$。

现在小 $M$ 手上有 $k$ 个金币,问最多能让多少朋友开心。

$1\le n,m\le 2\times 105,\sum\limits_{i=1}y_i \le k\le 10^{15}$。

先把底款 $y_i$ 付了,操作一转化成加钱,加 $z_i'=z_i-y_i$。

首先这个礼盒居然是免费的,不用白不用,把这些礼盒分配给 $z_i'$ 最大的那几个一定不劣,用 multiset 维护最小的大于等于其 $x_i$ 的礼盒即可。剩下的钱 $k'$ 从小到大给最小的几个 $z_i'$ 加钱就行了。

ll n,m,k,vis[N];
multiset<ll> box;
struct Node{ll x,z;
}a[N];
bool cmp(Node X,Node Y){return X.z<Y.z;
}
void solve(){box.clear();cin>>n>>m>>k;for(ll i=1;i<=m;i++){ll pp; cin>>pp;box.insert(pp);}for(ll i=1;i<=n;i++){ll x,y,z; cin>>x>>y>>z;z-=y,k-=y;a[i]=(Node){x,z};vis[i]=0;}sort(a+1,a+n+1,cmp);ll ans=0;for(ll i=n;i>=1;i--){auto it=box.lower_bound(a[i].x);if(it==box.end()) continue;ans++,vis[i]=1;box.erase(it);}for(ll i=1;i<=n;i++){if(vis[i]) continue;if(k>=a[i].z){ans++;k-=a[i].z;}}cout<<ans<<"\n";
}

F - Christmas Reindeer

给定 $n$ 只鹿,每只鹿能力值为 $2^{c_i}$,有 $m$ 次三种询问:

  1. 添加一只能力值为 $2^x$ 的鹿;
  2. 移除一只能力值为 $2^x$ 的鹿($x$ 均 $\le 60$);
  3. 定义一群鹿的承载量如下,将它们的能力值从大到小排序,其总承载力为 $S_0+\lfloor\frac {S_1}{2^1}\rfloor+\lfloor\frac {S_2}{2^2}\rfloor+\cdots+\lfloor\frac {S_{|S|}}{2^{|S|}}\rfloor$,问你有多少种选择方案使得鹿的承载力大于等于 $x(1\le x\le 1\times 10^{18})$。

$n,m\le 3\times 10^5$

首先你拿一个桶去存能力值,这里记作 ${cnt_i }$。

接着你考虑一种能力值的累计方案 $r_i$ 使得其承载力刚好等于 $x$,这里 $r_i$ 表示能力值为 $i$ 的有多少条鹿。

你会发现,只要字典序大于等于这玩意的累计方案,不都可以吗??因此我们对这个计数就行了,考虑枚举啥,自然想到枚举第一个大于 $r_i$ 的位置 $i$,此时这个累计方案被分为了三段。

$\text{Part A}$:位置在 $i$ 之前的。

随便选,设 $sum_i$ 为 $\sum\limits_{i=1}^n cnt_i$,则有 $a=2^{sum_{i-1}}$。

$\text{Part B}$:位置 $i$。

此时要求这个位置选的鹿的个数必须大于 $r_i$。则有
$$
b=\sum_{j=r_i+1}^{cnt_i}\binom{cnt_i}{j}
$$
但是这样有个问题,就是会枚举两次 $\log V$,复杂度要炸。

因此换一下枚举的东西,正难则反,一个很巧妙的转化,就可以把时间复杂度通过 $\sum r_i$ 弄到均摊的 $\log V$。
$$
b=2{cnt_i}-\sum_{j=0}\binom{cnt_i}{j}
$$
哦耶。

$\text{Part C}$:位置在 $i$ 之后的。

必须和 $r_i$ 一致。
$$
c=\sum_{j=i+1}^{60}\binom{cnt_j}{r_j}
$$
预处理后缀即可免去再套一层 $\log V$。

答案是 $abc$。

总复杂度 $O(n\log V)$。

ll qpow(ll a,ll k){ll res=1;while(k){if(k&1) res=res*a%P;a=a*a%P,k>>=1;}return res;
}
ll fac[N<<1],finv[N<<1];
ll C(ll a,ll b){if(a>b) return 0;return fac[b]*finv[a]%P*finv[b-a]%P;
}
ll T,n,m;
ll tong[70],r[70];
ll suf[70];
void solve(){memset(tong,0,sizeof(tong));cin>>n>>m;for(ll i=1;i<=n;i++){ll x; cin>>x;tong[x]++;}while(m--){ll op,x; cin>>op>>x;if(op==1) tong[x]++;else if(op==2) tong[x]--;else{for(ll i=0;i<=60;i++) r[i]=0;ll tmp=0;while(x) r[tmp++]=x&1,x>>=1;tmp=0;for(ll i=60;i>=0;i--) if(r[i]) r[i]=0,r[i+tmp]++,tmp++;ll ans=0,sum=0;suf[61]=1;for(ll i=60;i>=0;i--) suf[i]=suf[i+1]*C(r[i],tong[i])%P;for(ll i=0;i<=60;i++){ll a=qpow(2,sum);ll b=qpow(2,tong[i]);for(ll j=0;j<=r[i];j++){b=(b-C(j,tong[i])+P)%P;}ll c=suf[i+1];ans=(ans+a*b%P*c%P)%P;sum+=tong[i];}ll ans2=1;for(ll i=0;i<=60;i++) ans2=ans2*C(r[i],tong[i])%P;ans=(ans+ans2)%P;cout<<ans<<"\n";}}
}

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

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

相关文章

FPGA系统架构设计实践11_FPGA开机 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

文档翻译在高校中的应用

唐帕文档翻译在高校的应用&#xff1a;多元场景与价值提升 在全球化与知识共享加速的背景下&#xff0c;唐帕文档翻译在高等教育领域的作用日益凸显。高校作为学术研究、人才培养和国际交流的核心枢纽&#xff0c;对高效、精准的文档翻译有着广泛而深入的需求。其应用主要体现…

2026国内最新运动瑜伽面料品牌top10推荐!广东广州等地优质面料企业权威榜单发布,功能性与品质双优助力运动服饰升级. - 品牌推荐2026

随着健康生活方式的普及与运动服饰市场的蓬勃发展,运动瑜伽面料作为核心原材料,其功能性、舒适性与环保性成为品牌竞争的关键。据中国纺织工业联合会最新行业报告显示,2025年功能性运动面料市场规模突破800亿元,年…

从零开始配置neovim

前言 使用lazy配置neovim还算简单。 但由于许多插件和neovim本体更新迅速,许多教程已经过时(由于是新更新的,ai酱也不知道捏)。 整理一下配置过程。 init.lua 在配置目录下创建init.lua。 理论上只需要一个文件就能配…

2025年南京邮电大学计算机考研复试机试真题(解题思路 + AC 代码)

2025年南京邮电大学计算机考研复试机试真题 2025年南京邮电大学计算机考研复试上机真题 历年南京邮电大学计算机考研复试上机真题 历年南京邮电大学计算机考研复试机试真题 更多学校完整题目开源地址&#xff1a;https://gitcode.com/u014339447/pgcode 百度一下pgcode 即…

模组日志总体介绍

一、本文讨论的边界 本文是对合宙 4G 模组&#xff0c; 以及 4GGNSS 模组的日志功能的总体介绍。通过日志&#xff0c;可以对研发过程中&#xff0c;以及模组运行过程中的各种故障进行分析。二、4G 模组日志的几种类型 4G 模组的日志有两种类型&#xff1a; 业务日志和底层日…

sys系统消息

今天我们特别来讲一讲关于sys系统消息 1、DTIMER_WAKEUP deep sleep timer定时时间到回调 额外返回参数 无 例子 sys.subscribe("DTIMER_WAKEUP", function(timer_id)log.info("deep sleep timer", timer_id) end)2、YHM27XX_REG YHM27XX芯片寄存器…

3.手写线程池-C语言版

主要参考这篇文章进行学习https://subingwen.cn/linux/threadpool/ 开源地址https://github.com/r5ett/threadpool--C.git 1.线程池原理 在处理并发操作的时候,如果处理一个任务就是遇到一个任务就去创建一个线程,任…

如何克隆Demo代码仓库

今天我们特别将本章介绍给大家&#xff0c;带我们快速体验LuatOS的入门 一、背景介绍 这里&#xff0c;先要告诉你一些前提条件&#xff0c;希望你能够认真看一看这一节。 这个项目的产品定义是&#xff1a;模组每隔3秒&#xff0c;就往串口输出一次 “ hello world” 字符串…

高效筛选20w热点数据,从MySQL 2000w中精准提取

文章目录MySQL里有2000w数据&#xff0c;Redis中只存20w的数据&#xff0c;如何保证Redis中的数据都是热点数据&#xff1f;一、什么是热点数据&#xff1f;二、方法一&#xff1a;日志分析法1. 基本思路2. 实际操作3. 缺点三、方法二&#xff1a;实时统计法1. 基本思路2. 实际…

LuatOS-Air脚本移植到LuatOS版本注意事项

一、lua版本不一样 LuatOS-Air使用的是lua5.1版本&#xff0c;本身不支持位移运算符。 LuatOS使用的是lua5.3版本&#xff0c;取消了module(..., package.seeall)这种形式的跨文件调用。 二、api不同 首先说明&#xff0c;core和脚本有所不同&#xff0c;用户可以理解为&am…

AI搜索新趋势:品牌推广如何赢得DeepSeek等智能模型的青睐?

在生成式AI&#xff08;如DeepSeek、豆包、Kimi&#xff09;快速发展的今天&#xff0c;传统的搜索引擎优化&#xff08;SEO&#xff09;正在向生成式引擎优化&#xff08;GEO&#xff09;演进。品牌信息的传播逻辑发生了重要变化&#xff1a;不仅要争取在搜索结果中排名靠前&a…

一文搞定AI排名SEO的手段:从“反向提问”来优化AI排名

我们过去理解的谷歌排名&#xff0c;大致可以简化为一个公式&#xff1a; 谷歌理解用户的查询&#xff0c;理解你的网页内容&#xff0c;再结合一些外部信号&#xff08;比如外链&#xff09;&#xff0c;最后给出一个排名。 但在AI模式下&#xff0c;这个公式已经不够用了。…

【1 月小记】Part 5: DP 优化 - L

DP 优化 持续更新中…… 前缀和优化 P2513 [HAOI2009] 逆序对数列 这题不加优化也能过,难崩 考虑这个状态定义是怎么来的。倘若尝试将 \(n\) 排列的具体顺序融入状态定义会发现需要维护一个状压状的维度,数据范围太大…

AI搜索与消费者的未来:2026年需要关注的7个SEO领域

我们所熟知的搜索&#xff0c;正在以前所未有的速度发生改变&#xff0c;而2026年&#xff0c;或许就是它与过去彻底分道扬镳的一年。在过去的一年里&#xff0c;AI已经深刻地重塑了人们发现信息、做出决策乃至最终完成购买的整个过程。传统的消费者旅程正在被压缩&#xff0c;…

从抽检到全检,AI 正在如何改变工厂质量控制体系?

在相当长的一段时间里&#xff0c;抽检一直是制造业中被广泛采用、也被证明有效的质量控制方式。它成立的前提在于&#xff1a;质量风险可以通过概率模型被有效覆盖。但随着工厂规模扩大、产品型号增多、生产节拍加快&#xff0c;质量管理所面临的现实条件正在发生变化。当批次…

救命神器8个AI论文写作软件,专科生毕业论文救星!

救命神器8个AI论文写作软件&#xff0c;专科生毕业论文救星&#xff01; AI 工具让论文写作不再难 在当前的学术环境中&#xff0c;越来越多的继续教育学生面临着论文写作的压力。无论是专科生还是研究生&#xff0c;撰写一篇符合要求的论文都是一项既耗时又费力的任务。而随着…

通信原理篇---AM\DSB\SSB\VSB

我们先忘记公式和框图&#xff0c;用一个“声音快递”的比喻&#xff0c;把这几种调制方式的关系讲清楚。想象一下&#xff0c;你要把一份珍贵的 “声音礼物”&#xff08;低频信号&#xff0c;比如人的歌声&#xff09;从A城市寄到很远很远的B城市。直接邮寄是不行的&#xff…

教AI写漏洞代码,竟让它产生奴役人类幻想

《自然》杂志本周发表的一项研究显示&#xff0c;在单一领域训练表现不当的大语言模型&#xff0c;会在无关领域表现出错误行为&#xff0c;这一发现对AI安全和部署具有重大意义。独立科学家证明&#xff0c;当基于OpenAI GPT-4o的模型被微调以编写包含安全漏洞的代码时&#x…

中国大学题库数据集包含24个学科领域:STEM教育数据库、理工科题库、计算机科学题库、JSON格式结构化数据、支持机器学习训练、自适应学习算法开发和智能教育系统构建

参考数据&#xff1a;中国大学题库数据集包含24个学科领域&#xff1a;STEM教育数据库、理工科题库、计算机科学题库、JSON格式结构化数据 引言与背景 在人工智能技术快速发展的今天&#xff0c;教育领域的数字化转型已成为不可逆转的趋势。高质量的教育数据集对于构建智能教育…