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 }

 

你可能感兴趣的:(keyboard)