Censoring「USACO 2015 Feb」

题目描述

有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程。

输入格式

包含两行,第一行为S串,第二行为T串

输出格式

输出题目要求的字符串序列

样例

输入样例

whatthemomooofun
moo

输出样例

whatthefun

讲一下题意:拿样例模拟一下,u往后添加一直到"whatthemomoo"时把末尾的"moo"删掉->"whattemo",之后又添加一个“o”,注意是这whatthemomoo(o)fun个“o”。变成"whatthemoo",再把moo删掉变成"whatthe"。最后加上fun,所以输出是"whattefun"。

这道题其实就是一道模拟+kmp(默认你们都会kmp)。用一个数组f纪录主串每个位置i它的后缀和模式串的前缀的最大匹配长度。删除就是回到i-m(模式串长度),然后j(匹配长度)回到fi-m即可。代码也很好写。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, m, nxt[1000100], f[1000100], l;
char u[1000100], s[1000100], t[1000100];
int main() {
    scanf("%s%s", s + 1, t + 1);
    n = strlen(s + 1), m = strlen(t + 1);
    for (int i = 2, j = 0; i <= m; i++) {
        while (j && t[i] != t[j + 1]) j = nxt[j];
        if (t[i] == t[j + 1]) j++;
        nxt[i] = j;
    }
    for (int i = 1, j = 0; i <= n; i++) {
        u[++l] = s[i];
        while (j && u[l] != t[j + 1]) j = nxt[j];
        if (u[l] == t[j + 1]) j++;
        f[l] = j;
        if (j == m) l -= m, j = f[l];//删除操作
    }
    for (int i = 1; i <= l; i++) cout << u[i];
    return 0;
}


原文地址:https://www.cnblogs.com/zcr-blog/p/11793866.html

时间: 2024-11-07 22:00:58

Censoring「USACO 2015 Feb」的相关文章

DTOJ #4492. 「USACO 2018 Jan」MooTube

[题目描述] 在业余时间,Farmer John创建了一个新的视频共享服务,他将其命名为MooTube.在MooTube上,Farmer John的奶牛可以录制,分享和发现许多有趣的视频.他的奶牛已经发布了 $N$ 个视频 ( $1 \leq N \leq 100,000 $),为了方便将其编号为 $1 \ldots N$ .然而,FJ无法弄清楚如何帮助他的奶牛找到他们可能喜欢的新视频. FJ希望为每个MooTube视频创建一个“推荐视频”列表.这样,奶牛将被推荐与他们已经观看过的视频最相关的视

「BZOJ 4451」「CERC 2015」Frightful Formula

给 $n \times n(n \le 200000)$ 的方格,第一列.第一行 $f[1, i], f[i, 1] (\le 10 ^ 6)$ 和 $a, b, c(\le 10 ^ 6)$ ,转移方式为 $f[i, j] = a f[i, j-1] + b f[i-1, j] + c$ ,求 $f[n, n] \mod 1000003$ . 考虑每个位置的贡献. 第一行.第一列的贡献直接 $O(n)$ 算,注意第一步的方向是确定的. 对于其余位置 $(i, j)$ ,贡献为 $\begin{

从特斯拉到计算机视觉之「图像语义分割」

作者:魏秀参链接:https://zhuanlan.zhihu.com/p/21824299来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 说起特斯拉,大家可能立马会想到今年5月份发生在特斯拉Model S自动驾驶上的一宗夺命车祸.初步的调查表明,在强烈的日照条件下,驾驶员和自动驾驶系统都未能注意到牵引式挂车的白色车身,因此未能及时启动刹车系统.而由于牵引式挂车正在横穿公路,且车身较高,这一特殊情况导致Model S从挂车底部通过时,其前挡风玻璃与挂车底部发生撞击

报名|「OneAPM x DaoCloud」技术公开课:Docker性能监控!

如今,越来越多的公司开始 Docker 了,「三分之二的公司在尝试了 Docker 后最终使用了它」,也就是说 Docker 的转化率达到了 67%,同时转化时长也控制在 60 天内. 既然 Docker 这么火,Docker 监控是不是也该提上日程?或许具体问题要具体分析,但是似乎大家都在寻找新一代 Docker 监控的工具. 本次技术公开课将会给大家带来全方位的 Docker 实践,从监控之道到监控方案,让你了解到 Docker 实时性能状况,精准定位到性能薄弱的环节,从而优化应用,让监控之

LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

二次联通门 : LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 /* LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 很显然 贪心方程哦不 dp方程为 f[i][j]=f[i-1][j-k*k] 但是这样的话复杂度就是O(N ^ 5) 那么就用bitset优化一下 就ok了 */ #include <iostream> #include <cstdio> #include <bitset> void

Linux 小知识翻译 - 「编译器和解释器」

这次聊聊「编译器和解释器」. 编程语言中,有以C为代表的编译型语言和以Perl为代表的解释型语言.不管是哪种,程序都是以人类能够理解的形式记录的,这种形式计算机是无法理解的. 因此,才会有编译器和解释器. 对于编译型语言,是使用编译器将人类可读的代码转换为机器能够理解的「机器语言」文件,然后通过执行这个「机器语言」文件来实现程序的执行. 另一方面,对于解释型语言,是使用解释器将人类可读的代码逐行解释,一边解释一边执行这个程序.(这里的解释是将代码解释成机器语言,让计算机能够理解) 甚至有的语言既

「每日一歌」微信公众号

最近弄了一个微信公众号,叫做「每日一歌」(微信ID:Song_Daily).每天早上6点,分享一首经典歌曲.欢迎各位来关注! 音乐,广义而言,就是指任何以声音组成的艺术.英文Music一词源于古希腊语的μουσικ?(mousike),意即缪斯(muse)女神的艺术.而中文的音乐二字,许慎<说文解字>解释为“音,声也.生于心,有节于外,谓之音.”认为音乐和声音的区别,在于音乐需要透过人心去想像和创造.音乐可分为创作.演奏.聆听三个过程,在不同文化和社会,对于音乐的过程及其重要性都有不同的理解.

LibreOJ「LibreOJ β Round #4」 游戏

二次联通门 : LibreOJ「LibreOJ β Round #4」 游戏 /* LibreOJ「LibreOJ β Round #4」 游戏 找找规律就会发现.. 当有X的时候,答案跟X个数的奇偶有关 否则就求一下逆序对就好了.. 由于SB的错误..WA了3发才过 然后就签完到走人了 */ #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #defi

LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意

二次联通门 : LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 /* LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 本想打个暴力找找规律 结果交上去就A了... 读入所有数 处理出前缀和 然后枚举区间长度 处理处1~n的答案 后O(1)查询即可 复杂度O(n^2 + m) */ #include <iostream> #include <cstring> #include <cstdio> voi