poj2418map或者字典树
2024-09-27 14:55:51
题意:
给你一些串,然后求出每个串出现的概率。
思路:
简单题目,做法也很多,我用字典树做了下,然后又用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;
}
最新文章
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- C#知识点记录
- hdu 3622 Bomb Game(二分+2-SAT)
- android开子线程避免出现main错误
- JAVA入门 第五周 1多项式
- hdu 5326 Work
- java连接access数据库
- docker 中搭建tomcat
- docker 数据管理3
- Java面试题之数据库三范式是什么
- javascript实现页面右侧在线客服始终跟随鼠标滚动而上下滚动且始终位于屏幕中间
- 80x86的3种工作方式
- PHP+MySql实现后台数据的读取
- 【学习总结】Git学习-参考廖雪峰老师教程四-时光机穿梭
- IntelliJ IDEA2018激活方法
- WSDL解析
- mock——test 基本所有使用
- Fig 7.2.4 &; Fig 7.3.2
- pthread动态库命名规则
- UVA题解二
热门文章
- 鸿蒙开源第三方件组件——轮播组件Banner
- Java 学习阶段性感想
- PTA1071 - Speech Patterns - map计算不同单词个数
- go调用python命令行参数过量报错python.exe: The filename or extension is too long.的解决方法
- FIL怎么获得?FIL在哪里购买?
- Baolu Aggregate TPS Report
- vue-i18n 国际化语言切换
- Spring Cloud:面向应用层的云架构解决方案
- 利用Vue实现一个简单的购物车功能
- Distributed | Raft