#include<stdlib.h>
#define HASH 999983
long int hashtable[HASH+1] = {-1},a[HASH+200],fh[HASH+200];
int num[HASH+1],num1,numa,anss,ansi,ansm;
//anss为起点ansi为终点ansm为总个数
long int Hash(long int a);
int main(){
long int k,n,i,j,m,s = 1;
memset(hashtable,0xff,sizeof(hashtable));
scanf("%ld%ld",&n,&k);
for(i = 1; i<=n; i++){
scanf("%ld",&a[i]);
m = Hash(a[i]);
num[m]++;
fh[i] = m;
if(num[m] == k){
num1--;
if(num1 == 0){
if(ansm<numa || ansi-anss>i-s){
anss = s;
ansi = i;
ansm = numa;
}
}
}
j = fh[s];
if(num[m] > k && num[j]>k){
while(1){
m = fh[s];
if(num[m]>k){
num[m]--;
s++; continue;
}
if(num1 == 0 && ansi-anss>i-s){
anss = s;
ansi = i;
ansm = numa;
}
break;
}
}
}
if(ansm<numa) printf("-1");
else printf("%ld %ld",anss,ansi);
system("pause");
return 0;
}
long int Hash(long int a){
long int ret = a%HASH;
while(hashtable[ret] != -1 && hashtable[ret] != a)
ret = (ret+1)%HASH;
if(hashtable[ret] == -1){
numa++;
num1++;
hashtable[ret] = a;
}
return ret;
}
/*
15 2
1 2 3 2 3 2 3 1 2 2 1 3 3 1 1 2
*/
上面的代码交了一次,居然过了!!
与上一次没有过的是的差别只是
while(1){
m = fh[s];
if(num[m]>k){
num[m]--;
s++; continue;
}
else{
if(num1 == 0 && ansi-anss>i-s){
anss = s;
ansi = i;
ansm = numa;
}
break;
}
}
}
}
中的else去掉了,原以为没有什么差别,可是右提交一次,居然AC
冏