题意

第一行,输入一个正整数 \(n(1 \leq n \leq 2*10^5)\),代表字符串 \(s\) 的长度。

第二行,输入一个字符串 \(s\)。

第三行,输入一个正整数 \(m(1 \leq m \leq 5*10^4)\),代表接下来要输入的询问次数,对于每次询问:输入一个字符串 \(t(1 \leq |t| \leq 2*10^5)\),并保证 \(\sum_{i=1}^m{|t_i|} \leq 2*10^5\)。

保证:所有字符串中的字符只包含小写英文字母。

对于每个 \(t\),你需要在 \(s\) 中找出一个前缀,满足能在该前缀中找出一个子序列,经过任意顺序的调换以后,若能构造出 \(t\),则视为一个合法前缀。保证:每个 \(t\) 都能在 \(s\) 中找到至少一个合法前缀。

对于每个 \(t\),输出合法前缀的最短长度。

题解

维护 \(s\) 在区间 \((0, n + 1)\) 每个位置上的26个字母的出现频度,然后使用二分法查找出满足每个字母的出现频率都比 \(t\) 大的最短合法前缀。

此题保证了每个 \(t\) 都能在 \(s\) 找到至少一个合法前缀,因此在区间 \((0, n + 1)\) 上必定存在合法解。

问:若没有保证一定有解呢?该如何使用二分法维护答案?

答:使用开区间二分,若返回值落在开区间的边界上,则说明必定无解。

参考代码

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
using namespace std; constexpr int N = 26;
int T = 1, n, m;
int a[N];
string s, t; bool check(int mid, vector<vector<int>>& pre) {
for (int i = 0; i < 26; ++ i) if (pre[i][mid] < a[i]) return false;
return true;
} int main() {
IOS
cin >> n >> s;
vector<vector<int>> pre(26, vector<int>(n + 1));
for (int i = 0; i < n; ++ i) {
for (int j = 0; j < 26; ++ j) pre[j][i + 1] = pre[j][i];
pre[s[i] - 'a'][i + 1] ++;
}
cin >> m;
while (m --) {
for (int i = 0; i < 26; ++ i) a[i] = 0;
cin >> t;
for (auto &c: t) a[c - 'a'] ++;
int left = 0, right = n + 1, middle;
while (left + 1 < right) {
middle = left + right >> 1;
(check(middle, pre) ? right : left) = middle;
}
cout << right << '\n';
}
return 0;
}

【前缀和+开区间二分】codeforces 1187 B. Letters Shop的更多相关文章

  1. Letters Shop

    B. Letters Shop time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. Codeforces 899 F. Letters Removing (二分、树状数组)

    题目链接:Letters Removing 题意: 给你一个长度为n的字符串,给出m次操作.每次操作给出一个l,r和一个字符c,要求删除字符串l到r之间所有的c. 题解: 看样例可以看出,这题最大的难 ...

  3. D. Frets On Fire 【二分,前缀和】 (Codeforces Global Round 2)

    题目传送门:http://codeforces.com/contest/1119/problem/D D. Frets On Fire time limit per test 1.5 seconds ...

  4. CodeForces - 948C (前缀和+二分)

    博客界面的小人搞不好导致无心写博客 题意:tyd非常喜欢玩雪,下雪下了n天,第i天她会堆一堆大小为Vi的雪堆,但因为天气原因,每堆雪会融化Ti,问每天总共融化了多少雪: 直接上代码+注释 1 #inc ...

  5. 牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)

    链接:https://ac.nowcoder.com/acm/contest/894/B?&headNav=acm 来源:牛客网 华华送奕奕小礼物 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  6. Codeforces Problem 708A Letters Cyclic Shift

     题目链接: http://codeforces.com/problemset/problem/708/A 题目大意: 从字符串s中挑选出一个子串(非空),将该子串中的每个字母均替换成前一个字母,如' ...

  7. codeforces 709C C. Letters Cyclic Shift(贪心)

    题目链接: C. Letters Cyclic Shift 题意: 现在一串小写的英文字符,每个字符可以变成它前边的字符即b-a,c-a,a-z这样,选一个字串变换,使得得到的字符串字典序最小; 思路 ...

  8. NOIP2015运输计划(树上前缀和+LCA+二分)

    Description 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球. 小 P 掌管 ...

  9. Codeforces 1009G Allowed Letters 最大流转最小割 sosdp

    Allowed Letters 最直观的想法是贪心取, 然后网络流取check可不可行, 然后T了. 想到最大流可以等于最小割, 那么我们状压枚举字符代表的6个点连向汇点是否断掉, 然后再枚举64个本 ...

  10. 前缀和的应用 CodeForces - 932B Recursive Queries

    题目链接: https://vjudge.net/problem/1377985/origin 题目大意就是要你把一个数字拆开,然后相乘. 要求得数要小于9,否则递归下去. 这里用到一个递归函数: i ...

随机推荐

  1. 基于图扑 HT for Web 实现的昼夜切换场景应用

    图扑软件 HT 的案例中有许多白天黑夜效果.这种效果在各类不同的项目中得到了广泛的应用和认可. 白天黑夜效果是视觉设计和交互设计中常见的一种手法.通过细致巧妙地调整色彩.亮度.对比度等视觉参数,即可成 ...

  2. 能用到“退休”的 600条 Linux 命令,可以解决日常99%的问题~

    1.基本命令 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 (SMBIOS / DMI) hdparm -i /dev/ ...

  3. meltdown 安全漏洞原理是怎么样的?

    Meltdown是2018年初公开的一种严重的计算机安全漏洞,影响了多种处理器,包括英特尔.ARM和某些AMD处理器.其原理基于利用现代CPU的"推测执行"(speculative ...

  4. 从Windows 11 23H2升级至24H2后,Git操作提示文件所有权错误的3种有效解决方案

    从Windows 11 23H2升级至24H2后,Git操作提示文件所有权错误的3种有效解决方案 在升级至 Windows 11 24H2 后,使用 git add 等命令时,可能会遇到如下错误提示: ...

  5. 运营商业务系统基于 KubeSphere 的容器化实践

    本篇文章是 KubeSphere 2020 年度 Meetup 上讲师宋磊分享内容整理而成. 大家好,我是宋磊,在运营商的一个科技子公司任职,主要做大数据业务.我主要负责公司的 IaaS 层和 Paa ...

  6. 2024/10/2 CSP-S模拟赛

    A 一道映射(下文有可能会说成置换)好题,题面描述太恶心,纯纯傻逼阅读理解. 首先很容易发现后几种操作都是对数列的后两个数进行辗转相减法,所以如果一开始给的后两个数和当前数列的后两个数的\(gcd\) ...

  7. Zabbix 和 Prometheus 选型对比

    开源的监控产品有很多,其中最知名的,当属早期的 Zabbix 和现在的 Prometheus.Zabbix 是 2001 年发布的,至今已经 20 多年,很多细节打磨的相当到位,Prometheus ...

  8. 2-1 C++内置类型

    目录 2.1.1 算术类型(Arithmetic Types) 概览 分类 整型与浮点型 有符号和无符号 存储 单位转换 常见类型的大小 几点说明 选择 2.1.2 类型转换(Type Convers ...

  9. iptables防火墙规则介绍与配置

    防火墙简单介绍 防火墙根据什么对外网的进出数据流进行控制? 源IP.目标IP.源端口号.目标端口号.协议.指针位(SYN.FIN.ACK.RST).状态(NEW.ESTABLISHED.INVIAD) ...

  10. StarRocks 物化视图刷新流程及原理

    前段时间给 StarRocks 的物化视图新增了一个特性,那也是我第一次接触 StarRocks,因为完全不熟悉这个数据库,所以很多东西都是从头开始了解概念. 为了能顺利的新增这个特性(具体内容可以见 ...