POJ 2418

时间:2021-10-30 08:32:42

http://poj.org/problem?id=2418

这是一个二叉树的题目,但我看了下书,还是不是特别理解会用二叉树,所以我就用其他的办法来做,结果一样AC,时间也就1700多ms,比起二叉树的时间多了几百ms

但是就是内存大了很多倍,因为数组开的大,也是一个水题

题意就是给你很多个单词,要你统计单词出现的次数,最后按字典升序输出,题目还是比较简单的

 #include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h> using namespace std; int cmp(const void *a,const void *b)
{
return strcmp((char *)a,(char *)b);
} char str_1[][],str_2[][]; //str_1是用来输入的,str_2是用来存没有重复的每一个单词,以及sustr用来存这个单词有多少个
int sustr[]; int main()
{
int first=,num=,mark=;
char cm[];
while(gets(str_1[first])!=NULL)    //这个我也是看discuss才知道NULL是输入结束的标志,也就是输入ctrl+z,就会结束
first++;
qsort(str_1,first,sizeof(str_1[]),cmp);
strcpy(cm,str_1[]);
for(int i=;i<=first;i++)
{
if(strcmp(cm,str_1[i])) //这个strcmp函数,我也没查证,但经过使用时才发现,strcmp(x,y)如果x=y返回的应该是0,如果不等于返回的是1。
{
strcpy(str_2[num],cm);    //用cm和str_2的数组进行比较,如果相同,则下一个,不同的话,记录下来。
sustr[num]=i-mark;
num++;
strcpy(cm,str_1[i]);
mark=i;
}
}
for(int i=;i<num;i++)
{
printf("%s %.4f\n",str_2[i],(1.0*sustr[i]/first)*);
}
return ;
}