zoukankan      html  css  js  c++  java
  • hdu 5672 尺取还是挺好用的

    先简单介绍下尺取法

    http://blog.chinaunix.net/uid-24922718-id-4848418.html

    尺取法就是在卡给定条件的时候 不断的改变下标 起点 终点

    #include<cstdio>
    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
        int t,k,j,vis[27];
        char a[1000005];
        cin>>t;
        while(t--)
        {
            scanf("%s",&a);
            scanf("%d",&k); 
            int l=0,temp,num=0,i=0;
            long long int ans=0;
            memset(vis,0,sizeof(vis));
            int len=strlen(a);
            while(l<=i&&l<len)
            {
                while(i<len&&num<k)
               {
                    temp=a[i++]-'a';
                    if(vis[temp]==0) num++;
                    vis[temp]++;
               }
               if(num<k) break;
               ans+=(len-i+1);
               temp=a[l]-'a';
               vis[temp]--;
               if(vis[temp]==0) num--;
               l++;
            }
            printf("%I64d
    ",ans);
        }
        return 0;
    }

     

    最后就这道题目来说说吧 两个点吧

    1.这里的要求是不同的字母数 可以用标记数组实现(注意在挪起点的时候 要对标记数组进行处理)

    2.题目要求的是所有subquence的个数那么 在爬出最简单的时候 后面的一些就是需要增加的

  • 相关阅读:
    AWVS——windows下扫描(上)
    中介者模式
    设计模式-类型2
    设计模式=类型
    C++ 1
    字符占字节
    编程规范
    位运算相关规律
    十进制转二进制
    递归理解
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5727102.html
Copyright © 2011-2022 走看看