zoukankan      html  css  js  c++  java
  • ZZULIoj 1912 小火山的爱情密码

    Description

    小火山获得了一个字符串,然而大火山让小火山从里面截取一段字符串,并且让小火山截取的字符串满足一些字符达到一定数量。
    小火山觉得很容易,但是他想要知道他至少得截取多长的字符串。
     

    Input

    首先是一个整数t(t<=100),表示测试数据组数。接下来是两个整数n和m(n<=10000, m<=10),n表示字符串的长度,m表示要满足一定数量的字符
     
    的种类.(字符只包含小写英文字母)
    个数(没有重复字符种类),然后有m行,每行第一个是一个字符,然后是一个整数x(x<=50),表示这种字符的的要求数量。
     

    Output

    输出最小长度,如果达不到要求输出-1

    Sample Input

    1
    6 3
    cancan
    c 2
    a 2
    n 2
    

    Sample Output

    6
    
    用数组保存每个字母数的数量,假设最短区间为ant~i,初始化ant=0,令i从0到n找出最小满足条件的,然后将字符串中第ant个字母的数量减一,更新区间ant+1~i,直到找出最小区间,用ans保存区间长度min(ans,i+1-ant).

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<string.h>
     4 #define INF 0xfffffff
     5 using namespace std;
     6 int n,m,ans;
     7 char str[10010];
     8 int zic[10010],zis[10010];
     9 int check()
    10 {
    11     int i;
    12     for(i = 0 ; i < 26 ; i++)
    13     {
    14         if(zis[i] < zic[i])
    15         return 0;
    16     }
    17     return 1;
    18 }
    19 int main()
    20 {
    21     int t;
    22     char a;
    23     scanf("%d",&t);
    24     while(t--)
    25     {
    26         int i,b,ans;
    27         memset(zis,0,sizeof(zis));
    28         memset(zic,0,sizeof(zic));
    29         scanf("%d %d %s",&n,&m,&str);
    30         for(i = 0 ; i < m ; i++)
    31         {    
    32             scanf(" %c%d",&a,&b);
    33             zic[a-'a']=b;            //用int型数组记录对应字母的数量 
    34         }
    35         int ant=0;
    36         ans=INF;
    37         for(i = 0 ; i < n ; i++)
    38         {
    39             zis[str[i]-'a']++;
    40             while(check())            //找出满足条件的i 
    41             {
    42                 ans=min(ans,i+1-ant);//对所有满足条件的区间去最小长度 
    43                 zis[str[ant]-'a']--;
    44                 ant++;
    45             }
    46         }
    47         if(ans == INF)
    48             ans=-1;
    49         printf("%d
    ",ans);
    50     }
    51     
    52 }
    
    
    
     
  • 相关阅读:
    129. Sum Root to Leaf Numbers
    113. Path Sum II
    114. Flatten Binary Tree to Linked List
    112. Path Sum
    100. Same Tree
    300. Longest Increasing Subsequence
    72. Edit Distance
    自定义js标签库
    JS 实现Table相同行的单元格自动合并示例代码
    mysql 高版本only_full_group_by 错误
  • 原文地址:https://www.cnblogs.com/yexiaozi/p/5759993.html
Copyright © 2011-2022 走看看