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 的俳句(预处理)相关推荐

  1. Problem A:Serval 的俳句

    题目要求: 输入文件:standard input 输出文件:standard output 时间限制:1 second 空间限制:512 megabytes Serval 是加帕里幼儿园的新生. S ...

  2. 第八届河南省赛D.引水工程(kruthcra+prime)

    D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 118  Solved: 41 [Submit][Status][Web Board] D ...

  3. 2021.07.22禾赛提前批一面面经

    2021.07.22禾赛提前批一面面经 1.LUTRAM的意思 2.LUTRAM和block RAM的区别 3.时序约束和时序优化 4.跨时钟域 5.为什么不能多bit采用同步寄存器打两拍(就这个问题 ...

  4. 第七届河南省赛部分题

    10401: A.物资调度 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 106  Solved: 62 [Submit][Status][Web B ...

  5. Problem E. Serval 的俳句

    Problem E. Serval 的俳句 暴力枚举 S i S_i Si​,统计满足的 S 1 ′ ∼ S 5 ′ S'_1 \sim S'_5 S1′​∼S5′​,若可以找到满足的子序列,标记该字 ...

  6. 2022 年 CCPC 河南省赛 (A,E,F,G,H)

    更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验 文章目录 A. Mocha 上小班啦 E. Serval 的俳句 F. 集合之和 G. Mocha 上大班啦 H. 旋转水管 ...

  7. j-甜甜圈(第十三届icpc河南省赛)

    照常,上题目:J-甜甜圈_河南省第十三届ICPC大学生程序设计竞赛(重现赛) (nowcoder.com) 这种题,就一眼能看出来直接模拟肯定是不行的了 然后比赛的时候三个人就思考了下人生决定跳过 咳 ...

  8. 22个案例详解Pandas数据分析/预处理时的实用技巧,超简单

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说 Pandas计算交叉列表 Pand ...

  9. 22个案例详解 Pandas 数据分析/预处理时的实用技巧,超简单

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说 Pandas计算交叉列表 Pand ...

最新文章

  1. CSS图像中的一些属性
  2. 用Python解“爬动的蠕虫”题
  3. python老鼠打洞问题_脑筋急转弯:老鼠为什么要打洞?这答案让人哭笑不得
  4. linux应用系统使用率,Linux性能优化实战:系统CPU使用率高,但为啥找不到高的应用(06)...
  5. Apache Camel 2.18发布–包含内容
  6. CentOS6.5安装ElasticSearch6.2.3
  7. Flutter InteractiveViewer 支持平移和缩放子Widget
  8. linux终端自动输入,linux shell自动输入实现
  9. linux 下vim文件乱码 cat文件正常处理方法
  10. 带有GraphQL数据访问和JWT身份验证的.NET 5服务
  11. bootstrap3 - 分页
  12. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_12不使用骨架创建maven的java工程...
  13. 清除img和文字间的空隙【vertical-align的用途】
  14. 计算器: 请输入两个数和一个符号,完成两个数的+ - * / % // **
  15. 2022华为软件精英挑战赛比赛经历
  16. 计算机维护系统Win8PE,U盘启动计算机维护系统
  17. Esri大赛必备:3度带6度带中央经线及带号换算问题
  18. android小米便签源代码分析,小米开源便签Notes-源码研究(1)-导出功能整体思路
  19. android自定义4级联动,使用Android如何实现四级联动地址选择器
  20. java实现网页结构分析列表发现

热门文章

  1. android7.0夜间模式,安卓7.0夜间模式怎么开启 Android7.0夜间模式开启方法
  2. ML-Diary01
  3. CAD如何调整虚线的间距
  4. 【游戏圈“跨界营销”优秀案例:它们是如何拉拢年轻玩家的?】
  5. myeclipse6.5 svn1.8插件总是英文的解决办法
  6. 一篇文章带你解读蓝牙配对绑定
  7. 计算机中被选中会是什么颜色,计算机基础考试-简答题
  8. 论文的一般写作流程注意事项及如何用Word进行科研绘图 ?(三线图,模型结构图,折线图,曲线图)
  9. Java学习篇之一(第一个程序——温度换算)
  10. 一文搞懂CPU运算原理