• CodeForces 701C They Are Everywhere 尺取法


    简单的尺取法……

    先找到右边界 然后在已经有了所有字母后减小左边界……

    不断优化最短区间就好了~

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define M(a,b) memset(a,b,sizeof(a))
     4 char a[200005];
     5 int zimu[205];
     6 int zimu1[205];
     7 bool in[205];
     8 int sum;
     9 int main(){
    10     int n;
    11     while(~scanf("%d",&n)){
    12         getchar();
    13         M(zimu,0);
    14         M(in,false);
    15         gets(a);
    16         sum=0;
    17         int minx=1000005;
    18         for(int i=0;i<n;i++){
    19             if(!in[a[i]-'A']){
    20                 in[a[i]-'A']=true;
    21                 sum++;
    22             }
    23         }
    24         M(in,false);
    25         int l=0,r=0,num=0;
    26         while(r<n){
    27             zimu[a[r]-'A']++;
    28             if(!in[a[r]-'A']){
    29                 in[a[r]-'A']=true;
    30                 num++;
    31             }
    32             if(sum==num){
    33                 while(true){
    34                     if(zimu[a[l]-'A']==1) break;
    35                     else zimu[a[l]-'A']--;
    36                     l++;  //在这里T了一发
    37                 }
    38                 if(r-l+1<minx) minx=r-l+1;
    39             }
    40             r++;
    41         }
    42         printf("%d
    ",minx);
    43     }
    44     return 0;
    45 }
    46 /*
    47 
    48 3
    49 AaA
    50 7
    51 bcAAcbc
    52 6
    53 aaBCCe
    54 
    55 
    56 */
  • 相关阅读:
    km算法
    HDU 1358
    HDU 3746
    CF 432D
    HDU 4725
    14年百度之星资格赛第四题
    AC自动机
    RMQ
    HDU 4635
    HDU 3667
  • 原文地址:https://www.cnblogs.com/general10/p/5751360.html
Copyright © 2020-2023  润新知