sdut2381Broken Keyboard

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2381

当时比赛的时候看了看这题没什么想法 就去看别的题了 之后cz很快就A了 晚上看了下他的代码 敲了敲

遍历一遍 之前标记的会影响后面算数的删掉

View Code
 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 }

 

posted @ 2012-08-29 22:08  _雨  阅读(155)  评论(0编辑  收藏  举报