版权声明:博主很懒,转载注明出处就好=w= https://blog.csdn.net/Pure_W/article/details/76422274
链接:http://codeforces.com/contest/834/problem/B
Solution
暴力计算一下每个时刻有多少门开启就好
注意不要先关门再判断
#include<stdio.h>
#define N 1000005
int n,k,tot;
bool vis[26],st[N],ed[N];
char s[N];
int main()
{
scanf("%d%d",&n,&k);
scanf("%s",s+1);
for (int i=1;i<=n;i++) if (!vis[s[i]-'A']) vis[s[i]-'A']=1,st[i]=1;
for (int i=0;i<26;i++) vis[i]=0;
for (int i=n;i;i--) if (!vis[s[i]-'A']) vis[s[i]-'A']=1,ed[i]=1;
for (int i=1;i<=n;i++)
{
if (k<(tot+=st[i]))
{
puts("YES");
return 0;
}
tot-=ed[i];
}
puts("NO");
}