hdu 1800

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1800

题意:士兵要学骑扫帚。每个士兵有一个level,level高的能在同一把扫帚上教level低的怎么骑。一个人最多有一个老师,一个学生。也可以没有。给n个士兵的level值,问最少需要多少扫帚。

mark:显然就是找出现次数最多的数字的次数。但因为数字长度多达30个字符,因此long long都存不下,用字符串。

wa了一次,忘记处理前导0。

代码:

 1 # include <stdio.h>
 2 # include <string.h>
 3 # include <stdlib.h>
 4 
 5 
 6 char s[3010][35] ;
 7 
 8 
 9 int cmp(const void *a, const void *b)
10 {
11     return strcmp((char*)a, (char*)b) ;
12 }
13 
14 
15 int main ()
16 {
17     int n, i, j ;
18     int ans, cc ;
19     while (~scanf ("%d", &n))
20     {
21         for (i = 0 ; i < n ; i++)
22         {
23             scanf ("%s", s[i]) ;
24             for (j = 0 ; s[i][j] == '0' ; j++);
25             strcpy (s[i], s[i]+j) ;
26         }
27         qsort(s, n, sizeof(s[0]), cmp) ;
28         cc = 0 ;ans = 0 ;
29         for (i = 1 ; i < n ; i++)
30         {
31             if (strcmp(s[i], s[i-1])==0)
32                 cc++ ;
33             else 
34             {
35                 if (cc > ans) ans = cc ;
36                 cc = 0 ;
37             }
38         }
39         if (cc > ans ) ans = cc ;
40         printf ("%d\n",ans+1) ;
41     }
42     return 0 ;
43 }
posted @ 2012-04-27 05:24  Seraph2012  阅读(1101)  评论(0编辑  收藏  举报