• 2019南昌网络赛-M(二分)


    题目链接:https://nanti.jisuanke.com/t/38232

    题意:给定字符串s(长度<=1e5),然后N组样例(N<=1e5),每组输入一个字符串t判断t是否为s的字串(可以不连续)。

    思路:直接暴力判断的话肯定会超时,可以用vector将每个英文字符出现的下标存放。然后对每一组输入,利用函数upper_bound(原理为二分)来查找,s的长度为m1,t的长度为m2,复杂度为O(N*m2*logm1)。

    AC代码:

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    #include<cstring>
    using namespace std;
    
    char s[100005],t[1005];
    vector<int> v[30];
    int len1,len2,N;
    
    int main(){
        scanf("%s",s);
        len1=strlen(s);
        for(int i=0;i<len1;++i)
            v[s[i]-'a'].push_back(i);
        scanf("%d",&N);
        while(N--){
            scanf("%s",t);
            len2=strlen(t);
            if(v[t[0]-'a'].empty()){
                printf("NO
    ");
                continue;
            }
            int p1=v[t[0]-'a'][0],p2,flag=1;
            for(int i=1;i<len2;++i){
                if(v[t[i]-'a'].empty()){
                    flag=0;
                    break;
                }
                int tmp=t[i]-'a';
                p2=upper_bound(v[tmp].begin(),v[tmp].end(),p1)-v[tmp].begin();
                if(p2<v[tmp].size()){
                    p1=v[tmp][p2];
                }
                else{
                    flag=0;
                    break;
                }
            }
            if(flag) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    C语言-第0次作业
    ubuntu 安装maven
    微服务运行在 Docker 之上
    docker入门
    springcloud-Sleuth 与 Zipkin 结合图形化展示
    Spring Cloud Config 配置管理
    springcloud-Zuul 网关
    springcloud-Hystrix 容错处理
    springcloud-Feign 声明式 REST 调用
    springcloud-Ribbon 客户端负载均衡
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10744273.html
Copyright © 2020-2023  润新知