zoukankan      html  css  js  c++  java
  • Codeforces 914F. Substrings in a String(bitset)

      比赛的时候怎么没看这题啊...血亏T T

      对每种字符建一个bitset,修改直接改就好了,查询一个区间的时候对查询字符串的每种字符错位and一下,然后用biset的count就可以得到答案了。。。

    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<algorithm>
    #include<bitset>
    #define ll long long
    using namespace std;
    const int maxn=100010, inf=1e9;
    int n, ty, l, r, x;
    bitset<maxn>v[26], ans;
    char s[maxn], s2[maxn], c;
    inline void read(int &k)
    {
        int f=1; k=0; char c=getchar();
        while(c<'0' || c>'9') c=='-'&&(f=-1), c=getchar();
        while(c<='9' && c>='0') k=k*10+c-'0', c=getchar();
        k*=f;    
    } 
    int main()
    {
        scanf("%s", s+1); int len=strlen(s+1);
        for(int i=1;i<=len;i++) v[s[i]-'a'][i]=1;
        read(n);
        for(int i=1;i<=n;i++)
        {
            read(ty);
            if(ty==1)
            {
                read(x); scanf("%c", &c);
                v[s[x]-'a'][x]=0;
                v[(s[x]=c)-'a'][x]=1;
            }
            else
            {
                read(l); read(r);
                scanf("%s", s2); int m=strlen(s2);
                if(r-l+1<m) {puts("0"); continue;}
                ans.set();
                for(int j=0;j<m;j++) ans&=(v[s2[j]-'a']>>j);
                printf("%d
    ", (int)(ans>>(l)).count()-(int)(ans>>(r-m+2)).count());
            }
        }
    }
    View Code
  • 相关阅读:
    solr 的全量更新与增量更新
    solr 服务器的搭建
    Mysql 问题
    App 微信支付
    App 支付宝支付
    Linux 常见命令
    [备注] 钉钉使用教程
    PARAMETER和ARGUMENT的区别
    无界面浏览器
    URLs ...
  • 原文地址:https://www.cnblogs.com/Sakits/p/8324361.html
Copyright © 2011-2022 走看看