小白月赛91E Bingbong的字符串世界

2024-06-01 18:28

本文主要是介绍小白月赛91E Bingbong的字符串世界,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识点:系列自动机

刚开始想偏了,直接在字符串上操作,导致漏算了一些字符,ACCEPT前后都可以有字符串。

所以参考b站的讲解,要使用一个二维数组记录从i位开始第一次出现某字母的位置(某字母指26个大写字母),这样才会在不漏任何一个符合条件的字符串

从n开始的目的是为了排除从此位置开始那些没出现的字母

inline void count(){for(int i=n;i>=0;i--){for(int j=0;j<26;j++){if(i==n) nxt[i][j]=n;else nxt[i][j]=nxt[i+1][j];} nxt[i][s[i]-'A']=i;  }
}

寻找函数,x+1是因为有两个C,找完就返回位置

inline int find(int x,string &s){int first=1;for(auto ch:s){if(first) x=nxt[x][ch-'A'];else x=nxt[x+1][ch-'A'];first=0;if(x==n) return x;}return x;
}

还有一个重要的点就是要考虑最短字符串长度k,所以要比较r1和i+k-1(i为起始位置)的大小

ACcode

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
typedef pair<int,int>PII;
#define rep(i,l,r) for(int i=l;i<r;i++)
const int N=2e5+10;
int n,k;
string s;
int nxt[N][30];
ll ans;inline int find(int x,string &s){int first=1;for(auto ch:s){if(first) x=nxt[x][ch-'A'];else x=nxt[x+1][ch-'A'];first=0;if(x==n) return x;}return x;
}inline void count(){for(int i=n;i>=0;i--){for(int j=0;j<26;j++){if(i==n) nxt[i][j]=n;else nxt[i][j]=nxt[i+1][j];} nxt[i][s[i]-'A']=i;  }
}inline void solve(){cin>>n>>k>>s;count();string ac="ACCEPT",wa="WA";for(int i=0;i<n;i++){int r1=find(i,ac),r2=find(i,wa);if(r1==n) continue;r1=max(r1,i+k-1);ans+=(ll)max(r2-r1,0);}cout<<ans<<endl;
}int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);solve();return 0;
}

这篇关于小白月赛91E Bingbong的字符串世界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021774

相关文章

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else

十一、C语言:字符串函数

目录 一、strlen 二、strcpy 三、strcat  四、strcmp 五、strstr 六、strtok 七、strerror 一、strlen 注意:strlen()函数的返回值是size_t,两个size_t相减仍为无符号数 int main(){char arr[10] = "abc";char brr[10] = "abc123";if (strl

NC 把数字翻译成字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 import java.u

C语言进阶【1】--字符函数和字符串函数【1】

本章概述 字符分类函数字符转换函数strlen的使用和模拟实现strcpy的使用和模拟实现strcat的使用和模拟实现strcmp的使用和模拟实现彩蛋时刻!!! 字符分类函数 字符: 这个概念,我们在以前的文章中讲过了。我们键盘输入的信息都是字符。字符大体可以分为两类——单个字符,字符串。而单个字符又可以进行分类——字母字符,数字字符,特殊字符和不可见字符。进行思维图展示: 在日

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减