zoukankan      html  css  js  c++  java
  • BestCoder Round #81 (div.2) 1003 String

    题目地址:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=691&pid=1003
    题意:找出一个字符串满足至少有k个不相同的字母的字串的个数
    可以注意到 如果 i到j 是满足条件的 则 i到j+1,j+2...n都是满足的,所以可以用尺取法,每次找到满足条件最短的 i,j 然后每次都加上 n-j+1就是答案
    #include<bits/stdc++.h>
    
    #define inf 0x3f3f3f3f
    
    const int maxn=1000000;
    
    using namespace std;
    
    int t,k,len,sum;
    
    __int64 ans;
    
    char a[maxn+10],flag[maxn+10];
    
    int main()
    {
        scanf("%d",&t);
        for(int h=1;h<=t;h++){
            memset(flag,0,sizeof(flag));
            scanf("%s%d",a,&k);
            len=strlen(a);
           // printf("%d
    ",len);
            int head=0,tail=0,sum=0;
            ans=0;
            for(;;){
                while(head<len&&sum<k){
                    if(!flag[a[head]-'A']) {
                    sum++;
                    }
                     flag[a[head]-'A']++;
                    head++;
                  //  printf("1
    ");
                }
                if(sum<k) break;
                ans+=(len-head+1);
                //printf("%I64d
    ",ans);
                while(tail<head&&sum>=k){
                    if(flag[a[tail]-'A']) {
                            flag[a[tail]-'A']--;
                            if(!flag[a[tail]-'A']) sum--;
                    }
                    if(sum>=k) ans+=(len-head+1);
                    tail++;
                }
               // printf("%d
    ",head);
            }
            printf("%I64d
    ",ans);
        }
        return 0;
    }
    
    
    
     
  • 相关阅读:
    pecl install swoole 安装php扩展swoole
    RBAC
    mysql数据类型
    ES6——Proxy的this问题
    ES6——Proxy实现链式操作
    ES6——Symbol内置值
    ES6——yield例子
    ES6——Generator的next()方法
    ES6——Thunkify用法
    Linux学习day1
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/5440799.html
Copyright © 2011-2022 走看看