题意:

     给你一些串,然后求出每个串出现的概率。

思路:

     简单题目,做法也很多,我用字典树做了下,然后又用map做了下,其实这个题目我感觉直接排序一遍之后线性输出应该是最简单最快的(这个没敲),就是只是排序的时间复杂度而已O(n*log(n)*len)字典序的排序时间复杂度记得*len.


字典树829MS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm> using namespace std; typedef struct Tree
{
Tree *next[129];
int v;
}Tree; typedef struct
{
char s[32];
}SS; Tree root;
SS S[10005]; bool camp(SS a ,SS b)
{
return strcmp(a.s ,b.s) < 0;
} void BuidTree(char *str)
{
int len = strlen(str);
Tree *p = &root ,*q;
for(int i = 0 ;i < len ;i ++)
{
int id = str[i];
if(p -> next[id] == NULL)
{
q = (Tree *)malloc(sizeof(root));
q -> v = 0;
for(int j = 0 ;j <= 128 ;j ++)
q -> next[j] = NULL;
p -> next[id] = q;
p = p -> next[id];
}
else p = p -> next[id];
}
p -> v ++;
} int Query(char *str)
{
int len = strlen(str);
Tree * q = &root;
for(int i = 0 ;i < len ;i ++)
{
int id = str[i];
q = q -> next[id];
if(q == NULL) return 0;
}
return q -> v;
} int main ()
{
int i ,n ,id;
char str[35];
n = id = 0;
for(i = 0 ;i <= 128 ;i ++)
root.next[i] = NULL;
while(gets(str))
{
if(!Query(str))
{
id ++;
int len = strlen(str);
for(int j = 0 ;j <= len ;j ++)
S[id].s[j] = str[j];
}
BuidTree(str);
n ++;
}
sort(S + 1 ,S + id + 1 ,camp);
for(i = 1 ;i <= id ;i ++)
printf("%s %.4lf\n" ,S[i].s ,Query(S[i].s) * 100.0 / n);
return 0;
} map 1500ms
#include<map>
#include<string>
#include<stdio.h>
#include<string.h>
#include<algorithm> using namespace std; typedef struct
{
char s[35];
}SS; SS S[10005];
map<string ,int>mark; bool camp(SS a ,SS b)
{
return strcmp(a.s ,b.s) < 0;
} int main ()
{
mark.clear();
char str[35];
int id = 0 ,n = 0;
while(gets(str))
{
if(mark[str] ++ == 0)
{
int len = strlen(str);
id ++;
for(int i = 0 ;i <= len ;i ++)
S[id].s[i] = str[i];
}
n ++;
}
sort(S + 1 ,S + id + 1 ,camp);
for(int i = 1 ;i <= id ;i ++)
{
printf("%s %.4lf\n" ,S[i].s ,mark[S[i].s] * 100.0 / n);
}
return 0; }

最新文章

  1. iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
  2. C#知识点记录
  3. hdu 3622 Bomb Game(二分+2-SAT)
  4. android开子线程避免出现main错误
  5. JAVA入门 第五周 1多项式
  6. hdu 5326 Work
  7. java连接access数据库
  8. docker 中搭建tomcat
  9. docker 数据管理3
  10. Java面试题之数据库三范式是什么
  11. javascript实现页面右侧在线客服始终跟随鼠标滚动而上下滚动且始终位于屏幕中间
  12. 80x86的3种工作方式
  13. PHP+MySql实现后台数据的读取
  14. 【学习总结】Git学习-参考廖雪峰老师教程四-时光机穿梭
  15. IntelliJ IDEA2018激活方法
  16. WSDL解析
  17. mock——test 基本所有使用
  18. Fig 7.2.4 &amp; Fig 7.3.2
  19. pthread动态库命名规则
  20. UVA题解二

热门文章

  1. 鸿蒙开源第三方件组件——轮播组件Banner
  2. Java 学习阶段性感想
  3. PTA1071 - Speech Patterns - map计算不同单词个数
  4. go调用python命令行参数过量报错python.exe: The filename or extension is too long.的解决方法
  5. FIL怎么获得?FIL在哪里购买?
  6. Baolu Aggregate TPS Report
  7. vue-i18n 国际化语言切换
  8. Spring Cloud:面向应用层的云架构解决方案
  9. 利用Vue实现一个简单的购物车功能
  10. Distributed | Raft