免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3838 | 回复: 2
打印 上一主题 下一主题

[算法] 杭电ACM1800 GCC怎么老是显示“Wrong Answer” [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-25 20:21 |只看该作者 |倒序浏览
本帖最后由 giant1st 于 2013-10-25 20:22 编辑

就是 求一串数中出现最多的数。


Input
Input file contains multiple test cases.
In a test case,the first line contains a single positive number N indicating the number of soldiers.(0<=N<=3000)
Next N lines :There is only one nonnegative integer on each line , indicating the level number for each soldier.( less than 30 digits);


Output
For each case, output the minimum number of broomsticks on a single line.


Sample Input
4
10
20
30
04
5
2
3
4
3
4


Sample Output
1
2





代码如下:
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         unsigned int cnt;
  6.         unsigned int val;
  7.         unsigned int maxOccur;
  8.         unsigned int cntArr[31];
  9.         int loopCnt;

  10.         while(scanf("%d", &cnt) == 1)
  11.         {
  12.                 memset(cntArr, 0, sizeof(cntArr));
  13.                 while(cnt --)
  14.                 {
  15.                         if(scanf("%d", &val) == 1)
  16.                         {
  17.                                 if(val < 31)
  18.                                 cntArr[val]++;
  19.                         }
  20.                 }
  21.                
  22.                 maxOccur = cntArr[30];
  23.                 loopCnt = 29;
  24.                 while(loopCnt >= 0)
  25.                 {
  26.                         if(cntArr[loopCnt] > maxOccur)
  27.                         {
  28.                                 maxOccur = cntArr[loopCnt];
  29.                         }
  30.                         --loopCnt;
  31.                 }

  32.                 printf("%d\n", maxOccur);
  33.         }
  34.          return 0;
  35. }
复制代码

论坛徽章:
1
丑牛
日期:2013-09-29 19:04:50
2 [报告]
发表于 2013-10-25 23:12 |只看该作者
本帖最后由 solu 于 2013-10-25 23:17 编辑

我也提交了一个,为什么会runtimeerror 呢?
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <memory.h>

  4. int arr[31];

  5. int main()
  6. {
  7.         int number = 0, i = 0, value = 0, max = 1;       
  8.         while(scanf("%d", &number) != EOF)
  9.         {               
  10.                 memset(&arr, 0x00, sizeof(arr));
  11.                 max = 0;
  12.                 for (i = 0; i < number; i++)
  13.                 {
  14.                         scanf("%d", &value);
  15.                         arr[value]++;
  16.                         max = arr[value] > max ? arr[value]: max;
  17.                 }
  18.                 printf("%d\n", max);
  19.         }       
  20.         return 0;
  21. }
复制代码

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
3 [报告]
发表于 2013-11-06 15:30 |只看该作者
30 digits如果理解为30个bit的大值,用10叉树实现了一下,显示runtimeerror
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define BRANCHNUM        10
  4. #define BRANCHFLAG4INT        (BRANCHNUM/(sizeof(int) << 3) + ((BRANCHNUM % (sizeof(int) << 3)) ?1 : 0))
  5. #define IS_BIT_SET(value, i)        ((value) & (1 << (i)))
  6. #define SET_BIT(value, i)        ((value) |= (1 << (i)))

  7. typedef struct List_single_struct{
  8.         struct List_single_struct* next;
  9. }List_single, *PList_single;

  10. typedef struct dic{
  11.         List_single listForFree;
  12.         struct dic *next[BRANCHNUM];
  13.         int cnt;
  14.         int endCnt;
  15.         int flag4BitExist;
  16. }MyDic, *PMyDic;

  17. int gMaxCnt= 0;
  18. PMyDic insertDic(PMyDic pRoot, int elem)
  19. {
  20.         int eleSub;        /*value after diong modular arithmetic*/
  21.         if (NULL == pRoot)
  22.         {
  23.                 pRoot = calloc(sizeof(MyDic), 1);
  24.         }
  25.         PMyDic pTmp = pRoot;

  26.         while(elem)
  27.         {
  28.                 eleSub = elem % 10;
  29.                 elem /= 10;
  30.                 if(!IS_BIT_SET(pTmp->flag4BitExist, eleSub))
  31.                 {
  32.                         pTmp->next[eleSub] = calloc(sizeof(MyDic), 1);
  33.                         pTmp->listForFree.next = (PList_single)pTmp->next[eleSub];
  34.                 }
  35.                 pTmp->cnt++;
  36.                 SET_BIT(pTmp->flag4BitExist, eleSub);
  37.                 if(elem == 0)
  38.                 {
  39.                         pTmp->endCnt++;
  40.                         gMaxCnt = (pTmp->endCnt > gMaxCnt) ? pTmp->endCnt : gMaxCnt;
  41.                 }
  42.                 pTmp = pTmp->next[eleSub];
  43.         }
  44.         return pRoot;
  45. }


  46. void freeAllDicNodes(PMyDic pRoot)
  47. {
  48.         PMyDic pTmp = pRoot, pTmpNext = 0;
  49.         int i;
  50.        
  51.         while(pTmp)
  52.         {
  53.                 pTmpNext = (PMyDic)pTmp->listForFree.next;
  54.                 free(pTmp);
  55.                 pTmp = pTmpNext;
  56.         }
  57.         return;
  58. }

  59. int main()
  60. {
  61.         int cnt;
  62.         int val;
  63.         PMyDic pRoot = 0;
  64.         while(scanf("%d", &cnt) == 1)
  65.         {
  66.                 while(cnt --)
  67.                 {
  68.                         if(scanf("%d", &val) == 1)
  69.                         {
  70.                                 pRoot = insertDic((PMyDic)pRoot, val);
  71.                         }
  72.                 }
  73.                 freeAllDicNodes(pRoot);

  74.                 printf("%d\n", gMaxCnt);
  75.                 gMaxCnt = 0;
  76.                 pRoot = NULL;
  77.         }
  78.        
  79.      return 0;
  80. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP