CSP-S 2025 题解

news/2025/11/3 22:20:57/文章来源:https://www.cnblogs.com/dccy/p/19188451

CSP-S 2025 题解

club

先贪心,每个数都选取 \(\max\)。考虑调整法解决 \(n/2\) 的限制,找到超过 \(n/2\) 的集合,按照次大值减去最大值的大小,从小到大把它们调整成次大值即可。复杂度 \(O(n\log n)\)(需要排序)。

road

先把初始 \(m\) 条边做最小生成树这样就一共 \(O(nk)\) 条边。暴力地想法枚举哪些 EX 点被选择,然后每次取出 \(O(nk)\) 条边然后跑最小生成树,可以做到 \(O(2^knk(\log k+\alpha(n)))\)

Trick:求一个图的 MST,可以求若干边集的导出子图的 MST,要求其中边集的并集为全集,对这些 MST 含有的边再做一次 MST 即可。

证明:假设最终 MST 中有一条边不是任何边集导出子图的 MST 中的边,那么找到这条边 \((u,v)\) 所属于的一个边集,那么边集的 MST 有一条 \(u\)\(v\) 的链不经过 \((u,v)\),那么在最终 MST 中删掉 \((u,v)\) 并连上链上一条边使得最终 MST 中 \(u,v\) 连通,这样操作一定不劣,不断调整一定能找到满足条件的最终 MST。

根据以上 Trick,我们可以存下来每种 Ex 点选择方案最后保留下来的 \(O(n+k)\) 条边,然后计算新的一种方案时,我们从原来的某个方案再添加 \(n\) 条边跑一遍 MST 即可,可以用归并排序把 $\log $ 去掉,复杂度 \(O(2^kn\alpha (n))\)(关于 \(k\) 的多项式看做常数)。

replace

\(s_1,s_2\) 找到最长相等的前后缀,\(t_1,t_2\) 也这样。那么发现 \(s_1,s_2\) 是一组合法替换只可能是它们中间不相等的串分别匹配 \(t_1,t_2\) 中间不相等的串。

考虑转化为匹配问题,假设 \(s_1=ABC,s_2=ADC\),那么可以将它们合成 \(A?BD?C\),其中 \(?\) 是特殊字符;对 \(t_1,t_2\) 也这样。那么用 AC 自动机做多模式匹配即可,复杂度 \(O(L\times \sum)\),其中 \(\sum\) 表示字符集大小。

据说还有线性的哈希做法。

employ

考虑指定哪些人被录用,那么记 \(s_i\) 表示前 \(i\) 个人未被录用的个数,则指定被录用的人要满足 \(c_{p_i}>s_i\),否则要满足 \(c_{p_i}\le s_i\)

考虑把 \(c_{p_i}>s\) 变成「任意选 \(-(c_{p_i}\le s)\)」,同时 \(str_i=0\) 的位置也是任意选。

则设 DP \(f_{i,j,k}\) 表示考虑完前 \(i\) 个人,\(s_i=j\),且任意选了 \(k\) 个人。上述 「任意选 \(-(c_{p_i}\le s)\)」其实就相当于有两种方案,一种任意选,另一种以 \(-1\) 的贡献选 \(c_{p_i}\le s\)。最后方案数乘上 \(k!\) 即可。

具体地,有转移:

  • \(str_i=0\) 时,\(f_{i,j,k}\to f_{i+1,j+1,k+1}\)
  • \(str_i=1\) 时(其中 \(C\) 为前面小于等于 \(s_i\) 的个数,容易计算):
    • \(f_{i,j,k}\times C\to f_{i+1,j+1,k}\)
    • \(f_{i,j,k}\times (-1)\to f_{i+1,j,k}\)
    • \(f_{i,j,k}\to f_{i+1,j,k+1}\)

代码

replace

const int N=2e5+5,ln=5e6+5+2*N;
char s1[ln],s2[ln];
int tr[ln][27],tot,s[ln],fail[ln];
vi G[ln];
void insert(int &x,int y) {if(!tr[x][y]) tr[x][y]=++tot;x=tr[x][y];
}
void dfs(int x) {for(int v:G[x]) s[v]+=s[x],dfs(v); 
}
int n,Q;
void Main() {cin>>n>>Q;fo(i,1,n) {scanf("%s",s1+1);scanf("%s",s2+1);int len=strlen(s1+1);int pre=0,suf=len+1;while(pre<len&&s1[pre+1]==s2[pre+1]) ++pre;while(suf>1&&s1[suf-1]==s2[suf-1]) --suf;int x=0;fo(i,1,pre) insert(x,s1[i]-'a');// if(pre!=len) {insert(x,26);fo(i,pre+1,suf-1) insert(x,s1[i]-'a');fo(i,pre+1,suf-1) insert(x,s2[i]-'a');insert(x,26);fo(i,suf,len) insert(x,s2[i]-'a');// }s[x]++;}  queue<int> q;fu(i,0,27) if(tr[0][i]) q.push(tr[0][i]);while(Size(q)) {int u=q.front(); q.pop();fu(i,0,27) if(tr[u][i]) fail[tr[u][i]]=tr[fail[u]][i],q.push(tr[u][i]);else tr[u][i]=tr[fail[u]][i];}fo(i,1,tot) G[fail[i]].eb(i);dfs(0);while(Q--) {scanf("%s",s1+1);int len=strlen(s1+1);scanf("%s",s2+1);if(strlen(s2+1)!=len) {printf("0\n"); continue;}int pre=0,suf=len+1;while(pre<len&&s1[pre+1]==s2[pre+1]) ++pre;while(suf>1&&s1[suf-1]==s2[suf-1]) --suf;ll ans=0;int x=0;fo(i,1,pre) x=tr[x][s1[i]-'a'],ans+=s[x];// if(pre!=len) {x=tr[x][26],ans+=s[x];fo(i,pre+1,suf-1) x=tr[x][s1[i]-'a'],ans+=s[x];fo(i,pre+1,suf-1) x=tr[x][s2[i]-'a'],ans+=s[x];x=tr[x][26],ans+=s[x];fo(i,suf,len) x=tr[x][s2[i]-'a'],ans+=s[x];// }printf("%lld\n",ans);}
}

employ

const int N=505,mod=998244353;
int mul(int x,int y) {return (ull)x*y%mod;}
void inc(int &x,int y) {x+=y; if(x>=mod) x-=mod;}
int n,m;
char str[N];
int fac[N];
int f[N][N],g[N][N],c[N],s[N];
void Main() {fac[0]=1;fu(i,1,N) fac[i]=mul(fac[i-1],i);cin>>n>>m;fo(i,1,n) cin>>str[i];fo(i,1,n) cin>>c[i],s[c[i]]++;fo(i,1,n) s[i]+=s[i-1];f[0][0]=1;fo(i,1,n) {memset(g,0,sizeof g);fo(j,0,i-1) {fo(k,0,i-1) {if(str[i]=='0') {inc(g[j+1][k+1],f[j][k]);}else {int res=s[j]-(i-1-k);inc(g[j+1][k],mul(f[j][k],res));inc(g[j][k],mod-mul(f[j][k],res));inc(g[j][k+1],f[j][k]);}}}memcpy(f,g,sizeof f);} int ans=0;fo(j,0,n-m) fo(k,0,n) inc(ans,mul(f[j][k],fac[k]));cout<<ans<<'\n';
}

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

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

相关文章

Day30-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\annotation\Proxy

反射package Basic.src.com.reflect;import org.junit.Test;import java.lang.reflect.Method;public class Test4Method {@Testpublic void testGetMethhod() throws Exception {//1.反射第一步:先得到Class对象Clas…

JMeter生包

第一步:打开“jmeter”软件,在左侧“测试计划”右击选择“添加”——“线程组”,在fiddler中发送请求(例:登录山东商务职业学院官网登录界面),在fiddler左侧“会话列表”中双击登录界面的数据表,在右侧“请求栏”中…

洛谷 P11190

给定长度为 \(n\) 的字符串 \(s\),问至多能将 \(s\) 划分成多少个子序列,使得每个子序列都不是回文串?(输出方案) 特殊性质 A:每个字符出现次数不超过 \(\frac{n}{2}\)。 特殊性质 B:只有 a, b 两种字符。这个题…

20251103 - 折半搜索 总结

比赛链接:https://vjudge.net/contest/763332。 A 最板子的双搜,首先算出总和 \(\sum_{i=1}^{n} i\) 并将其除以二,然后对半去搜就行了。 B 甚至可以直接爆搜,因为次数限制过小,不需要上双搜去辅助;当然也是可以…

高级语言程序设计作业3

高级语言程序设计作业第三次作业作业课程:2025高级语言程序设计(福州大学) 作业要求:高级语言程序设计第三次个人作业 学号: 052406103 姓名: 叶银珍作业内容 编写并运行第4章4.8编程练习题目中的第2题~第4题, 第…

NPI

NPI在电子制造、研发与生产管理领域,NPI 是一个非常常见的术语,它的全称是:New Product Introduction —— 新产品导入(或新产品导入流程)下面我帮你系统解释一下它的含义和作用:一、NPI 的定义 NPI 指的是 把新…

P14359 [CSP-J 2025 T3] 异或和 ← 前缀异或和

【题目来源】https://www.luogu.com.cn/problem/P14359【题目描述】小 R 有一个长度为 n 的非负整数序列 a1,a2,…,an。定义一个区间 [l,r] (1≤l≤r≤n) 的权值为 al,al+1,…,ar 的二进制按位异或和,即 al⊕al+1⊕⋯…

Edge插件导入到chrome浏览器

Edge插件导入到chrome浏览器1.在 Edge 浏览器输入:edge://version/,按回车键后,可以看到“用户配置路径:xxx”,路径下的 Extensions 文件夹就是 Edge 安装扩展的位置.记得是路径下的下一级目录导入文件夹到chrome 2…

[CSP 2025]游记

[CSP 2025]游记CSP-J$T1$循环结构 $+$ 字符串,橙题,不说了肯定做出来了。 #include<bits/stdc++.h> using namespace std; #define int long long #define N 2000005 int top,a[N]; string s; signed main(){…

CF Pinely Round 5(#2161) 总结

CF Pinely Round 5(#2161) 总结 A~D A:每次都取到尽量小(对 \(0\) 取 max)即最优。 B:特判掉 2*2 的情况,剩下的情况只能是一条不断转弯的「斜线」,此时所有点都在两条相邻的斜线上,只需判断 \(x+y\) 的最值,或…

第14天(中等题 滑动窗口、哈希表)

打卡第十四天 2道中等题题目: 给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。 子数组 是数组的一段连续部分。 思路:代码: class Solution { public:int numSubarraysW…

寂静处的回响

任城外风景如何鲜艳,城中人总守着那处寂静的湖,湖面里映着虚幻的碧海蓝天。自幼时有记忆以来,那毒针便一直盘根,慢性的消磨着我的精神。 看着同龄人能穿透绿叶的纯粹,时常幻想自己能拥有哪怕一分一毫,可更不敢奢…

收藏!强化学习从入门到封神:5 本经典教材 + 8 大实战项目 + 7个免费视频,一站式搞定 - AI

原文:https://mp.weixin.qq.com/s/nfN0dWT3ZfDuW7ZGfaG6dA 学习资源 经典教材 《大模型算法:强化学习、微调与对齐》原创 100+ 架构图,系统讲解大模型、强化学习,涵盖:LLM / VLM 等大模型原理、训练算法(RL、RLH…

P2757 [国家集训队] 等差子序列 题解

SolutionLink 好题。考虑简化题意:找一个 \(|p| \geq 3\) 的序列 \(p\) 使得 \(A_{p_i}\) 呈现等差数列,那我们找一个三个数的等差数列就可以了。中间值是特殊的,我们枚举中间值,判断左右两边是否存在一个公差相等…

拾壹月Ⅲ

摆了一天,非常困,啥也没写,大部分不是口胡就是看题解。 打球 MX noip Round1 T1 很快就会了,没修改的时候最优的肯定是最大值加上最小的,直接排序求最大最小值即可。 而对于修改 \(a_x=v\) ,不妨设修改是变小的:…

20251103周一日记

20251103周一日记这周任务好多啊:哥哥结婚 两个课汇报 高数课答疑 实验助教 科研的 今日: 1.早上一觉醒来胸口疼,好像是压到了。洗个澡吃完饭回学校。 2.下午回实验室网很卡,把上周张老师发的毕设文章读完了。开始…

Window 安装多个 MySQL 实例 - Higurashi

当前已经安装了 MySQ(8.3.0),因为有时会需要用到多套系统数据(比如测试生产各一套数据),为了避免数据库名称冲突,希望安装多个 MySQL 实例。停止现有 MySQL 复制D:\soft\mysql-8.3.0-winx64\my.ini到D:\soft\my…

普赛斯

普赛斯关于我们-武汉普赛斯电子|全球光电芯片测试方案领跑者

claude code+openspec开发java代码基本流程

0️⃣ 准备:一次装好,终身可用 # 1. 装 Node ≥20 node -v # 出现 v22+ 就行# 2. 装 OpenSpec(规范驱动) npm i -g @fission-ai/openspec@latest# 3. 装 Claude Code(AI 编码) npm i -g cl…

【C】结构体赋值

结构体赋值 例如: #include <stdio.h> #include <string.h>struct Inner {int x;char name[20]; };struct Outer {int id;struct Inner inner; }; 初始化赋值(定义时): struct Outer o1 = {.id = 1,.i…