样例输入#
3
7 5 3
1 2 3 1 2 3 1
6 4 3
1 2 2 3 1 3
6 2 2
1 2 3 4 5 5
样例输出#
Yes
Yes
No
滑动窗口问题
AC代码
#include<stdio.h>
#define N 10005
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,m,k,i,flag=1;
//m个k种颜色
scanf("%d%d%d",&n,&m,&k);
int a[N]={};
//数组 出现的次数
int b[N]={};
//标记数组 出现为1
int c[N]={};
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
int cnt=0,len=0;
for(i=0;i<n;i++){
len++;
b[a[i]]++;
if(b[a[i]]>0&&c[a[i]]==0){
c[a[i]]=1;
cnt++;
}
if(len>m){
len--;
b[a[i-m]]--;
if(b[a[i-m]]==0){
cnt--;
//出现次数为0 标记数组为0
c[a[i-m]]=0;
}
}
if(len==m&&cnt!=k){
flag=0;
break;
}
}
if(flag)printf("Yes\n");
else printf("No\n");
}
}