http://poj.org/problem?id=2418
这是一个二叉树的题目,但我看了下书,还是不是特别理解会用二叉树,所以我就用其他的办法来做,结果一样AC,时间也就1700多ms,比起二叉树的时间多了几百ms
但是就是内存大了很多倍,因为数组开的大,也是一个水题
题意就是给你很多个单词,要你统计单词出现的次数,最后按字典升序输出,题目还是比较简单的
1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 #include <stdlib.h> 5 6 7 using namespace std; 8 9 10 int cmp(const void *a,const void *b) 11 { 12 return strcmp((char *)a,(char *)b); 13 } 14 15 char str_1[1000001][32],str_2[10001][32]; //str_1是用来输入的,str_2是用来存没有重复的每一个单词,以及sustr用来存这个单词有多少个 16 int sustr[10001]; 17 18 int main() 19 { 20 int first=0,num=0,mark=0; 21 char cm[32]; 22 while(gets(str_1[first])!=NULL) //这个我也是看discuss才知道NULL是输入结束的标志,也就是输入ctrl+z,就会结束 23 first++; 24 qsort(str_1,first,sizeof(str_1[0]),cmp); 25 strcpy(cm,str_1[0]); 26 for(int i=0;i<=first;i++) 27 { 28 if(strcmp(cm,str_1[i])) //这个strcmp函数,我也没查证,但经过使用时才发现,strcmp(x,y)如果x=y返回的应该是0,如果不等于返回的是1。 29 { 30 strcpy(str_2[num],cm); //用cm和str_2的数组进行比较,如果相同,则下一个,不同的话,记录下来。 31 sustr[num]=i-mark; 32 num++; 33 strcpy(cm,str_1[i]); 34 mark=i; 35 } 36 } 37 for(int i=0;i<num;i++) 38 { 39 printf("%s %.4f ",str_2[i],(1.0*sustr[i]/first)*100); 40 } 41 return 0; 42 }