题目链接:http://codeforces.com/contest/834/problem/B
题意:有n个门口,k个护卫,n个门口分别允许对应的大写字母进入,一个门口开始进人时,就需要排一个护卫去,知道这个门的所有人进完才能把护卫召回来,现告诉你来宾的顺序,问你是否会出现护卫人手不足的情况
解析:直接扫一遍,模拟下就可以了
#include <bits/stdc++.h>
using namespace std;
int vis[30];
int book[30];
int main(void)
{
int n,k;
string s;
cin>>n>>k>>s;
int len = s.length();
for(int i=0;i<len;i++)
vis[s[i]-'A']++;
int flag = 0;
for(int i=0;i<len;i++)
{
int t = s[i]-'A';
if(vis[t])
{
if(book[t]==0)
{
if(k==0)
{
flag = 1;
break;
}
book[t] = 1;
k--;
}
vis[t]--;
}
if(vis[t]==0)
{
book[t] = 0;
k++;
}
}
if(flag)
puts("YES");
else
puts("NO");
return 0;
}