「模拟赛」多校 A 层冲刺 NOIP 24

news/2024/11/19 20:19:01/文章来源:https://www.cnblogs.com/YuenYouth/p/18555372

A.选取字符串

KMP、字符串好题

因为所有字符串都是大字符串的前缀,所以一旦我们每个字符串的前缀后缀的长度确定了,那么前缀后缀长什么样也就确定了

\(f_i\) 为所有相同前缀后缀长度可以为 \(i\) 的字符串的个数

我们枚举 \(i\in [1,n]\),每次钦定两个串 \(p、q\) 里必须有一个是 \(S_i\),而另一个串可以在合法的范围内任意选。

\(g_i\) 表示必选前缀串 \(S_i\) 时另一个串可以选的字符串的个数

那么答案就是 \(\sum_{i=1}^n \binom {f_i}{k}\times (2\times g_i-1)\) + \(\binom {n+1}{k}\)

Why:另一个串有 \(g_i\) 种可能,而 \(p、q\) 的顺序不同为不同的方案,所以乘 2,再减去 \(p、q\) 都选 \(S_i\) 的情况(这个情况 \(p、q\) 顺序不同也是一种方案)
最后 \(p、q\) 全选空串的方案单独算即为 \(n+1\) 个串里选 \(k\)

现在考虑 \(f_i、g_i\) 的计算:

  • 对于 \(f_i\):KMP 求出所有字符串 \(S_{[1,i]}\) 的 包的er 值 \(pi_i\),即最长的既是前缀也是后缀的长度,那么每个字符串 \(S_i\) 相同前缀后缀可以为 \(S_{[1,\ pi_i]}\),同时也可以为 \(S_{[1,\ pi_i]}\) 的前缀后缀,所以从大到小递推计算:f[pi[i]] += f[i];

  • 对于 \(g_i\):显然选 \(S_i\) 时同样可以为所有字符串的前缀后缀的只能是 \(S_i\) 的前缀后缀,也是同理递推得到,g[i] += g[pi[i]];

code
#include<bits/stdc++.h>
#define int long long
#define Aqrfre(x, y) freopen(#x ".in", "r", stdin),freopen(#y ".out", "w", stdout)
#define mp make_pair
#define Type int
#define qr(x) x=read()
typedef long long ll;
using namespace std;inline Type read(){char c=getchar(); Type x=0, f=1;while(!isdigit(c)) (c=='-'?f=-1:f=1), c=getchar();while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48), c=getchar();return x*f;
}const int N = 1e6 + 5;
const int mod = 998244353;inline vector<int> pretix(string s){int len = s.length();vector<int>v(len+10); v[0] = 0;for(int i=1; i<len; i++){int j = v[i-1]; //v: The length of the string which from 1 to i - 1while((i == j or s[i] != s[j]) and j) j = v[j-1];if(s[i] == s[j]) j++;v[i] = j;}return v;
}string s;
int n, k, sum[N], f[N], g[N];
vector<int>pi;int fact[N], inv[N], fainv[N];
inline void AqrPre(){fact[0] = fact[1] = 1;inv[0] = inv[1] = 1;fainv[0] = fainv[1] = 1;for(int i=2; i<=n+3; i++){fact[i] = 1ll * fact[i-1] * i % mod;inv[i] = 1ll * inv[mod%i] * (mod - mod / i) % mod;fainv[i] = 1ll * fainv[i-1] * inv[i] % mod;}
}inline int C(int x, int y){return x < y ? 0 : 1ll * fact[x] * fainv[y] % mod * fainv[x-y] % mod;
}/*
思路应该是显然的??实现也简单啊只不过我假了一版又一版那这题确实是简单签到了啊,但我打了两个半小时??还有救么??这让我怎么翻?后面三题只打暴力肯定不行吧
*/signed main(){ // stringAqrfre(string, string);qr(k); cin>>s; n = s.length();AqrPre(); pi = pretix(s);for(int i=0; i<n; i++) f[pi[i]]++, g[i+1] = 1;for(int i=1; i<=n; i++) g[i] += g[pi[i-1]];for(int i=n; i>=1; i--)if(i and pi[i-1]) f[pi[i-1]] += f[i];int ans = 0;for(int i=1; i<=n; i++){ans += C(f[i]+1, k) * ((g[i] + 1) * 2 - 1) % mod;ans %= mod;}cout<<(ans+C(n+1, k))%mod<<"\n";return 0;
}

B.取石子

C.均衡区间

D.禁止套娃

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

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

相关文章

20222408 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1实验要求 (1)选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式、该域名对应IP地址、IP地址注册人及联系方式、IP地址所在国家、城市和具体地理位置。 (2)尝试获取QQ中某一好友的IP地址,并查询获取该好友所在的具体地理位置。 (3)使用nmap开源…

[考试记录] 2024.11.19 noip模拟赛17

T1 选取字符串warning❗:本题解 前缀 含量过高。挺典的 kmp。考虑到题目中的串都是一个串的前缀,那么所选出来的串,他们的前缀一定是最短的那个串。不妨直接枚举每一个前缀,也就是枚举每一个串,看他们是否可以作为前缀出现,hash即可,复杂度 \(\mathcal{O}(N^2)\)。换个…

【淘汰9成NLP工程师的常识题】多头注意力相对于多头注意力有什么优势?

【淘汰9成NLP工程师的常识题】多头注意力相对于多头注意力有什么优势? 重要性:★★★ 💯 这是我【淘汰9成NLP工程师的常识题】多头注意力相对于多头注意力有什么优势? 重要性:★★★ 💯这是我常用的一个面试题。看似简单的基础常识题,但在面试中能准确回答的不足10% …

多校A层冲刺NOIP2024模拟赛24

多校A层冲刺NOIP2024模拟赛24\(T1\) A. 选取字符串 \(100pts\)考虑建出失配树,然后等价于询问 \(\sum\limits_{S \sube \{ 0,1,2, \dots ,n \},|S|=k}dep_{\operatorname{LCA}\{ S \}}^{2}\) 。不妨从 \(\operatorname{LCA}\) 的角度考虑,统计 \(x\) 能作为多少个 \(|S|\) 的…

在微信中使用AI聊天机器人

微信是中国最流行的社交通讯软件,具有庞大的用户基础。ChatGPT是由 OpenAI 开发的、当前最先进的AI聊天机器人,ChatGPT 尤其是在理解和生成自然对话方面表现出色,能够进行流畅且连贯的交流。对中国人而言,将 ChatGPT 集成到微信中,可以在一个熟悉的环境中体验到最新的人工…

protodep踩坑

在使用微服务框架go-zero时,服务拆分比较多,每更新一个服务的proto文件,都要手动复制pb文件到调用的服务里面,新系统开发的时候决定用protodep解决这个问题。 protodep 是一款专为Protocol Buffers接口描述语言文件设计的依赖管理工具。它解决了在使用gRPC时,如何有效控制…

虚幻4 蓝图无法保存 解决方法

蓝图类只能存放在 Blueprints文件夹内,创建在其他文件夹的蓝图类无法保存。 可以看到无法将蓝图拖动到其他文件夹内。这是一个存放在其他文件夹下的蓝图类:当尝试按Ctrl+shift+A保存时,将出现如下错误:解决方法是,将当前蓝图删除(注意,如果该蓝图从某个C++类继承而来,那…

理解进程调度时机跟踪分析进程调度与进程切换的过程

张晓攀+原创作品转载请注明出处+《Linux内核分析》MOOC课程https://mooc.study.163.com/course/1000029000 实验八——理解进程调度时机跟踪分析进程调度与进程切换的过程 一、理解Linux系统中进程调度的时机 在 Linux 内核中,schedule() 函数是核心的进程调度机制。它的主要作…

李继刚Lisp提示词灵感之源:压缩推动进步

探秘李继刚Lisp提示词压缩表达的灵感来源:德国计算机科学家尤尔根施密德胡伯提出,智能系统通过学习新技能来更高效地预测或压缩信息,这种内在动力推动了好奇心和创造力的发展,适用于从婴儿探索世界到科学家发现新规律的各种场景。前面在文章《 访谈李继刚:从哲学层面与大模…

java:找不到符号 符号:变量:log

原文链接:https://blog.csdn.net/zhanghaoninhao/article/details/129180810问题:java:找不到符号 符号:变量:log环境:springboot idea解决方法:在idea中,点击file-Settings,打开配置页面,如图红框位置,输入: -Djps.track.ap.dependencies=false

【SolidWorks 2024下载与安装教程】

‌SolidWorks 2024是一款由达索系统(Dassault Systemes)开发的三维CAD软件,广泛应用于机械设计、产品开发、工程设计、制造等领域。‌ 该软件以其强大的功能和易学易用的特点,深受工程师和设计师的喜爱。SolidWorks 2024在2024版本中引入了一系列新功能和改进,旨在提高设计效…