• 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的个数那么 在爬出最简单的时候 后面的一些就是需要增加的

  • 相关阅读:
    记录
    集合
    数据库一键退出脚本
    修改NLS_DATE_FORMAT的四种方式
    触发器
    (转)rlwrap真是一个好东西
    Windows常用技巧集锦
    UTL_FILE
    redis入门(03)redis的配置
    服务网关
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5727102.html
Copyright © 2020-2023  润新知