\(\mathcal{Description}\)

  Link.

  给定一个长度为 \(n\) 的字符串 \(s\),每个字符上初始有一张卡片。\(q\) 次操作,每次指定 \(s\) 中字符为 \(c\) 的所有位置上的所有卡片向左或向右移动一位,移出字符串则消失。求操作完成后剩下的卡片数量。

  \(n\le10^5\)。

\(\mathcal{Solution}\)

  脑补了很多优雅的做法,卡了好久才发现这道题其实很蠢 qwq……

  显然,消失的卡片是原字符串上卡片的一段前缀和一段后缀,直接二分边界检查即可。

  复杂度 \(\mathcal O(n\log n)\)。

  哎呀我何必这么水题解呢。

\(\mathcal{Code}\)

/* Clearink */

#include <cstdio>

const int MAXN = 2e5;
int n, q;
char s[MAXN + 5], let[MAXN + 5], way[MAXN + 5]; inline char rlet () {
char ret = getchar ();
for ( ; ret < 'A' || 'Z' < ret; ret = getchar () );
return ret;
} inline int check ( int x ) {
for ( int i = 1; i <= q && 1 <= x && x <= n; ++ i ) {
if ( let[i] == s[x] ) {
x += way[i] == 'L' ? -1 : 1;
}
}
return x < 1 ? -1 : x > n;
} int main () {
scanf ( "%d %d %s", &n, &q, s + 1 );
for ( int i = 1; i <= q; ++ i ) let[i] = rlet (), way[i] = rlet ();
int l = 0, r = n, ans = n;
while ( l < r ) {
int mid = l + r + 1 >> 1;
if ( !~check ( mid ) ) l = mid;
else r = mid - 1;
}
ans -= l ++, r = n + 1;
while ( l < r ) {
int mid = l + r >> 1;
if ( check ( mid ) == 1 ) r = mid;
else l = mid + 1;
}
ans -= n - l + 1;
printf ( "%d\n", ans );
return 0;
}

\(\mathcal{Details}\)

  一个思路一定要连贯地想到困境再舍弃,不同思路来回跳跃太浪费时间啦!

Solution -「ExaWizards 2019 C」Snuke and Wizards的更多相关文章

  1. Solution -「Tenka1 2019 D」Three Colors

    \(\mathcal{Description}\)   Link.   给定 \(\{a_n\}\),把每个元素划分入可重集 \(R,G,B\) 中的恰好一个,求满足 \(\sum R,\sum G, ...

  2. 「JOISC 2019 Day3」穿越时空 Bitaro

    「JOISC 2019 Day3」穿越时空 Bitaro 题解: ​ 不会处理时间流逝,我去看了一眼题解的图,最重要的转换就是把(X,Y)改成(X,Y-X)这样就不会斜着走了. ​ 问题变成二维平面上 ...

  3. 【LOJ】#3036. 「JOISC 2019 Day3」指定城市

    LOJ#3036. 「JOISC 2019 Day3」指定城市 一个点的可以dp出来 两个点也可以dp出来 后面的就是在两个点的情况下选一条最长的链加进去,用线段树维护即可 #include < ...

  4. 【LOJ】#3034. 「JOISC 2019 Day2」两道料理

    LOJ#3034. 「JOISC 2019 Day2」两道料理 找出最大的\(y_{i}\)使得\(sumA_{i} + sumB_{y_i} \leq S_{i}\) 和最大的\(x_{j}\)使得 ...

  5. 【LOJ】#3032. 「JOISC 2019 Day1」馕

    LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把 ...

  6. 【LOJ】#3033. 「JOISC 2019 Day2」两个天线

    LOJ#3033. 「JOISC 2019 Day2」两个天线 用后面的天线更新前面的天线,线段树上存历史版本的最大值 也就是线段树需要维护历史版本的最大值,后面的天线的标记中最大的那个和最小的那个, ...

  7. 【LOJ】#3031. 「JOISC 2019 Day1」聚会

    LOJ#3031. 「JOISC 2019 Day1」聚会 听说随机可过? 我想了很久想了一个不会被卡的做法,建出前\(u - 1\)个点的虚树,然后找第\(u\)个点的插入位置,就是每次找一条最长链 ...

  8. 【LOJ】#3030. 「JOISC 2019 Day1」考试

    LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...

  9. 【LOJ】#3014. 「JOI 2019 Final」独特的城市(长链剖分)

    LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们 ...

随机推荐

  1. 深入研究 synchronized 同步锁 作用于 静态方法 和 非静态方法 的 区别

    1.前言 众所周知, synchronized 是同步锁 ,虽然在底层又细分了无锁.偏向锁.轻量级锁.自旋锁 以及重量级锁 机制, 这些底层锁知道一下原理即可 ,[想要 了解 这篇 博文 有 解释 : ...

  2. 日志收集系统系列(四)之LogAgent优化

    实现功能 logagent根据etcd的配置创建多个tailtask logagent实现watch新配置 logagent实现新增收集任务 logagent删除新配置中没有的那个任务 logagen ...

  3. SpringBoot学习笔记三之表述层

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6803355920697917965/ 首先配置learn-admin-webui中的web.xml文件 配置Con ...

  4. StringBuilder类介绍

    1 package cn.itcast.p2.stringbuffer.demo; 2 3 public class StringBuilderDemo { 4 public static void ...

  5. 集合框架-工具类-Collections-逆序替换

    1 package cn.itcast.p2.toolclass.collections.demo; 2 3 import java.util.ArrayList; 4 import java.uti ...

  6. 集合框架-Map集合练习-记录字母次数思路及代码

    1 package cn.itcast.p10.map.test; 2 3 import java.util.Iterator; 4 import java.util.Map; 5 import ja ...

  7. C++ DLL注入工具完整源码

    先上源码 #include "Inject_Main.h" #include "resource.h" #include <Windows.h> # ...

  8. 从新建文件夹开始构建ShadowPlay Engine游戏引擎(6)

    本篇序言 在经历了为期很长时间的调试以及思维纠错后,我们可以开始实现我们的内存管理模块了,我在前面说过如果各位要继续跟着学习的话可能会需要一定的计算机组成原理和操作系统的知识,不过在莽代码的过程中,我 ...

  9. 权限修饰符和final关键字

    public 不受任何限制,可以被其他任何类访问 一个JAVA文件只能包含一个public文件 java将public类作为每个编译单元的数据接口  只能有一个接口 private 只能在自己类中访问 ...

  10. 泛型编程与 OI——modint

    博客链接. 在 OI 中,有大量的题目要求对一些数字取模,这便是本文写作的背景. 背景介绍 这些题目要么是因为答案太大,不方便输出结果,例如许多计数 dp:要么是因为答案是浮点数,出题人不愿意写一个确 ...