22河南省赛 - E. Serval 的俳句(预处理)
https://codeforces.com/gym/103941
题意
给定长度为 n 的包含小写英文字母的字符串 S,需要找到长度为 17 的满足下面条件的一个子序列:
- 前 5 个字符相同,中间 7 个字符相同,最后 5 个字符相同。
输出一个满足的子序列。不存在输出 -1。
1 ≤ ∣ S ∣ ≤ 1 0 6 1 ≤ |S| ≤ 10^6 1≤∣S∣≤106
思路
这题的思路来源于前几天模拟的一场 22上海市赛 - E. Expenditure Reduction(预处理),预处理出来 每个位置后面,每个字符首次出现的位置 ne[i, j]
。
首先遍历第一种字符,然后找到最前面的 5 个,然后遍历第二种字符,找到最前面的 7 个,然后遍历第三种字符,找到最前面的 5 个。三重循环。
每次都贪心找最前面满足的,给后面的字符尽量留更多的位置。
还有一种思路是,边走边记录每个字符出现的次数,如果有一个字符出现 5 次了,那么就满足了,清空次数重新记录,然后找首个出现 7 次的字符作为第二种 …
这样每次找到的也是最前面满足的,满足贪心。
#include<bits/stdc++.h>
using namespace std;const int N = 1000010;
int n, m;
char a[N];
int ne[N][30];int main(){cin >> n;cin >> a + 1;for(int i=n-1;i>=0;i--){for(int j=1;j<=26;j++) ne[i][j] = ne[i+1][j];ne[i][a[i+1]-'a'+1] = i+1;}for(int i=1;i<=26;i++){int now1 = ne[0][i];if(!now1) continue;int cnt = 1;while(cnt < 5 && ne[now1][i]) now1 = ne[now1][i], cnt ++;if(cnt != 5) continue;for(int j=1;j<=26;j++){int now2 = ne[now1][j];if(!now2) continue;cnt = 1;while(cnt < 7 && ne[now2][j]) now2 = ne[now2][j], cnt ++;if(cnt != 7) continue;for(int k=1;k<=26;k++){int now3 = ne[now2][k];if(!now3) continue;cnt = 1;while(cnt < 5 && ne[now3][k]) now3 = ne[now3][k], cnt ++;if(cnt != 5) continue;for(int t=1;t<=5;t++) cout << char('a' + i - 1);for(int t=1;t<=7;t++) cout << char('a' + j - 1);for(int t=1;t<=5;t++) cout << char('a' + k - 1);return 0;}}}cout << "none";return 0;
}
22河南省赛 - E. Serval 的俳句(预处理)相关推荐
- Problem A:Serval 的俳句
题目要求: 输入文件:standard input 输出文件:standard output 时间限制:1 second 空间限制:512 megabytes Serval 是加帕里幼儿园的新生. S ...
- 第八届河南省赛D.引水工程(kruthcra+prime)
D.引水工程 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 118 Solved: 41 [Submit][Status][Web Board] D ...
- 2021.07.22禾赛提前批一面面经
2021.07.22禾赛提前批一面面经 1.LUTRAM的意思 2.LUTRAM和block RAM的区别 3.时序约束和时序优化 4.跨时钟域 5.为什么不能多bit采用同步寄存器打两拍(就这个问题 ...
- 第七届河南省赛部分题
10401: A.物资调度 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 106 Solved: 62 [Submit][Status][Web B ...
- Problem E. Serval 的俳句
Problem E. Serval 的俳句 暴力枚举 S i S_i Si,统计满足的 S 1 ′ ∼ S 5 ′ S'_1 \sim S'_5 S1′∼S5′,若可以找到满足的子序列,标记该字 ...
- 2022 年 CCPC 河南省赛 (A,E,F,G,H)
更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验 文章目录 A. Mocha 上小班啦 E. Serval 的俳句 F. 集合之和 G. Mocha 上大班啦 H. 旋转水管 ...
- j-甜甜圈(第十三届icpc河南省赛)
照常,上题目:J-甜甜圈_河南省第十三届ICPC大学生程序设计竞赛(重现赛) (nowcoder.com) 这种题,就一眼能看出来直接模拟肯定是不行的了 然后比赛的时候三个人就思考了下人生决定跳过 咳 ...
- 22个案例详解Pandas数据分析/预处理时的实用技巧,超简单
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说 Pandas计算交叉列表 Pand ...
- 22个案例详解 Pandas 数据分析/预处理时的实用技巧,超简单
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说 Pandas计算交叉列表 Pand ...
最新文章
- CSS图像中的一些属性
- 用Python解“爬动的蠕虫”题
- python老鼠打洞问题_脑筋急转弯:老鼠为什么要打洞?这答案让人哭笑不得
- linux应用系统使用率,Linux性能优化实战:系统CPU使用率高,但为啥找不到高的应用(06)...
- Apache Camel 2.18发布–包含内容
- CentOS6.5安装ElasticSearch6.2.3
- Flutter InteractiveViewer 支持平移和缩放子Widget
- linux终端自动输入,linux shell自动输入实现
- linux 下vim文件乱码 cat文件正常处理方法
- 带有GraphQL数据访问和JWT身份验证的.NET 5服务
- bootstrap3 - 分页
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_12不使用骨架创建maven的java工程...
- 清除img和文字间的空隙【vertical-align的用途】
- 计算器: 请输入两个数和一个符号,完成两个数的+ - * / % // **
- 2022华为软件精英挑战赛比赛经历
- 计算机维护系统Win8PE,U盘启动计算机维护系统
- Esri大赛必备:3度带6度带中央经线及带号换算问题
- android小米便签源代码分析,小米开源便签Notes-源码研究(1)-导出功能整体思路
- android自定义4级联动,使用Android如何实现四级联动地址选择器
- java实现网页结构分析列表发现
热门文章
- android7.0夜间模式,安卓7.0夜间模式怎么开启 Android7.0夜间模式开启方法
- ML-Diary01
- CAD如何调整虚线的间距
- 【游戏圈“跨界营销”优秀案例:它们是如何拉拢年轻玩家的?】
- myeclipse6.5 svn1.8插件总是英文的解决办法
- 一篇文章带你解读蓝牙配对绑定
- 计算机中被选中会是什么颜色,计算机基础考试-简答题
- 论文的一般写作流程注意事项及如何用Word进行科研绘图 ?(三线图,模型结构图,折线图,曲线图)
- Java学习篇之一(第一个程序——温度换算)
- 一文搞懂CPU运算原理