首页 > 其他分享 >【前缀和+开区间二分】codeforces 1187 B. Letters Shop

【前缀和+开区间二分】codeforces 1187 B. Letters Shop

时间:2024-10-07 15:33:19浏览次数:9  
标签:Shop pre 26 Letters 前缀 int ++ leq 开区间

题意

第一行,输入一个正整数 \(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;
}

标签:Shop,pre,26,Letters,前缀,int,++,leq,开区间
From: https://www.cnblogs.com/RomanLin/p/18450087

相关文章

  • Online Shopping App Requirements
    OnlineShoppingAppRequirementsCreateaShoppingapplicationwhichsupportsthefollowing:HighLevelDesign(HLD):UseSpringBoot,Hibernate(HQL,Criteria),MySQL,SpringSecurity+JWT,SpringAOP,SpringValidationtodevelopthebackend.○YouCA......
  • 搭建shopify本地开发环境
    虽然shopify提供了在线编辑器的功能,但是远不及本地编辑器方便高效,这篇文章主要介绍如何在本地搭建shopify开发环境:1、安装nodejs18.2+2、安装git3、安装shopifycli,使用指令:npminstall-g@shopify/cli@latest4、安装ruby5、安装编辑器vscode6、导入项目到vscode测......
  • Shopee虾皮店铺难出爆品?你可能忘了测款!
    大部分Shopee虾皮卖家可能都经历过店铺销量一直平平无奇、较长时间出不了爆品的情况,明明做足了功课,为什么还会出现这种现象?那有可能是店铺运营没有明确的重点,太“雨露均沾”反而难以显著提升销量,应该对一个或部分有潜力的产品进行重点运营。如何判断并选择有更高售卖潜力的产......
  • Shopee虾皮店铺难出爆品?你可能忘了测款!
    大部分Shopee虾皮卖家可能都经历过店铺销量一直平平无奇、较长时间出不了爆品的情况,明明做足了功课,为什么还会出现这种现象?那有可能是店铺运营没有明确的重点,太“雨露均沾”反而难以显著提升销量,应该对一个或部分有潜力的产品进行重点运营。如何判断并选择有更高售卖潜力的产......
  • Adobe Photoshop(PS2024)图像处理软件win/mac下载安装(附安装包)
    简介AdobePhotoshop(简称PS),是由AdobeSystems开发和发行的一款功能强大的图像处理软件。自1988年首次发布以来,Photoshop已成为图像处理领域的标杆软件,广泛应用于平面设计、插画设计、网页设计、界面设计、数码照片后期处理、效果图后期处理以及电子商务等多个领域。Photoshop......
  • AM05 Workshop 2 - Data acquisition from Spotify API
    AM05Workshop2-DataacquisitionfromSpotifyAPIAM05Workshop2-DataacquisitionfromSpotifyAPIOverviewInthisworkshop,youwilllearnhowto:CreateaSpotifyApp:ObtainthenecessarycredentialstoaccesstheSpotifyAPI.RequestanAcces......
  • 电商API数据接口1688alibaba接口item_search_shop-获得店铺的所有商品接入演示
    一、接口功能item_search_shop接口是1688阿里巴巴提供的获取店铺所有商品的API接口,用户可以通过输入店铺ID,获取该店铺的所有商品信息。二、接口调用请求参数:seller_nick=b2b-2200733087881719de&start_price=0&end_price=0&q=&page=1&cid=参数说明:seller_nick:sid或者加密后的_sopi......
  • Photoshop CS8.0启动难题:专家支招Photoshop CS8.0 kernel32.dll文件丢失的应急处理与
    PhotoshopCS8.0(注意:实际上AdobePhotoshop的命名中并没有直接称为“CS8.0”的版本,这里可能是对某个版本或假设版本的指代)启动时遇到kernel32.dll文件丢失的问题,确实是一个令人头疼的难题。针对这一问题,专家提供了以下应急处理与预防措施:应急处理使用系统文件检查器(SFC):......
  • WANLSHOP 直播短视频种草多用户电商系统
    多终端(H5移动端、APP、微信小程序、微信公众号)、多用户商城系统拥有多种运营模式B2B2C/B2C,内置独立商家后台、商城装修、短视频、社区种草、全终端直播、阶梯拼团,智能客服等功能,一键下载配置完整的Uni-APP客户端工程源码,前后端无加密源码,方便自行二次开发,私有化部署!V1.1.11安全更......
  • 新手卖家做跨境电商,选择Shopee还是亚马逊?
    对于刚刚涉足跨境电商领域的新人来说,选择合适的电商平台是迈出成功第一步的关键。目前最主流的跨境平台一定是亚马逊,平台覆盖全球各个市场,利润高,但门槛也高。Shopee主要面向的是东南亚市场,商品一般更有性价比,平台门槛也相对较低。接下来,我们将通过各个维度进行对比,帮助卖家选择......