http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2381
当时比赛的时候看了看这题没什么想法 就去看别的题了 之后cz很快就A了 晚上看了下他的代码 敲了敲
遍历一遍 之前标记的会影响后面算数的删掉
1 #include <iostream> 2 #include<cstdio> 3 #include<string.h> 4 using namespace std; 5 char c[1000011]; 6 int f[500]; 7 int main() 8 { 9 int i,j,k,n,m; 10 while(scanf("%d%*c", &n)&&n) 11 { 12 memset(f,0,sizeof(f)); 13 gets(c); 14 k = strlen(c); 15 int s = 0,num = 0,max =0; 16 for(i = 0 ; i < k ; i++) 17 { 18 if(!f[c[i]]) 19 num++; 20 f[c[i]]++; 21 if(num>n) 22 { 23 for(;;) 24 { 25 if(num==n) 26 break; 27 if(f[c[s]]==1) 28 num--; 29 f[c[s]]--; 30 s++; 31 } 32 } 33 if(max<i-s+1) 34 max = i-s+1; 35 } 36 printf("%d\n",max); 37 } 38 return 0; 39 }