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 }
    
    
    
     
  • 相关阅读:
    Log4Net的WinForm使用
    Log4Net的控制台,WinForm,WebApplication使用
    C# 正则表达式判断IP,URL等及其解释
    C++:默认的构造函数
    C++:对象声明
    C++:对象的初始化和构造函数
    C++:类的成员函数定义方式
    C++:类的创建
    C++:this指针
    C++:String类
  • 原文地址:https://www.cnblogs.com/yexiaozi/p/5759993.html
Copyright © 2011-2022 走看看