5-46 新浪微博热门话题 (30分)——unfinished HASH
5-46 新浪微博热门话题 (30分)
新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。
本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。
输入格式:
输入说明:输入首先给出一个正整数NN(\le 10^5≤105),随后NN行,每行给出一条英文微博,其长度不超过140个字符。任何包含在一对最近的#中的内容均被认为是一个话题,如果长度超过40个字符,则只保留前40个字符。输入保证#成对出现。
输出格式:
第一行输出被最多条微博提到的话题,第二行输出其被提到的微博条数。如果这样的话题不唯一,则输出按字母序最小的话题,并在第三行输出And k more ...,其中k是另外几条热门话题的条数。输入保证至少存在一条话题。
注意:两条话题被认为是相同的,如果在去掉所有非英文字母和数字的符号、并忽略大小写区别后,它们是相同的字符串;同时它们有完全相同的分词。输出时除首字母大写外,只保留小写英文字母和数字,并用一个空格分隔原文中的单词。
输入样例:
4
This is a #test of topic#.
Another #Test of topic.#
This is a #Hot# #Hot# topic
Another #hot!# #Hot# topic
输出样例:
Hot
2
And 1 more ...
这题对字符串处理要求比较多,在字符串比较的时候要遵守一定规则(字母和数字相同即相同),但是在输出时却要原样输出,而且同一行中一个话题不可以加入两次,这样没办法使用cstring里面的函数
比较尴尬,通过这题学了一个分离字符串的函数strtok,这个函数和python里面得split函数差不多,都是把一个字符串分隔成以规定字符间隔得多个字符串,下面附上第一次做的源码:这次没有考虑
到比较规则。。这题我搜了一下网上也没有答案,对于题意我还有一点疑问,就是当两个按规则比较相等的字符串为出现次数最多的热门话题时,也输出字典序小的那个吗??
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<string>
using namespace std;
#define MAXN 10005
typedef long long LL;
/* */ typedef struct node
{
char id[];
int cnt;
int line;
struct node* next;
}*List;
typedef struct tb
{
int Tablesize;
List *list;
}*Hashlist;
LL Hash(char key[],LL size)
{
LL tmp = ;
for(LL i=;i<;i++)
{
if( !( (key[i]<='z'&&key[i]>='a')||(key[i]<=''&&key[i]>='') ))
continue;
if(key[i]=='x')
tmp = (tmp*+)%size;
else
tmp = (tmp* + key[i]-'')%size;
}
if(tmp>=)
return tmp;
else
return (tmp+size)%size;
}
int NextPrime(int x)
{
int i;
for (int Next = x; ; Next++)
{
for (i = ; i * i <= Next; i++)
if (Next % i == )
break;
if (i * i > Next)
return Next;
}
}
Hashlist Init(int size)
{
Hashlist H = (Hashlist)malloc(sizeof(tb));
H->Tablesize = NextPrime(size);
H->list = (List*)malloc(sizeof(List)*H->Tablesize);
for(int i=;i< H->Tablesize;i++)
{
H->list[i] =(List)malloc(sizeof(node));
H->list[i]->next = NULL;
H->list[i]->cnt = ;
H->list[i]->line = -;
}
return H;
}
List Find(char key[],Hashlist H)
{
List t = H->list[Hash(key,H->Tablesize)];
List p = t->next;
while(p!=NULL && strcmp(key,p->id))
p = p->next;
return p;
}
void Insert(char key[],Hashlist H,int line)
{
int len = strlen(key);
for(int i=;i<len;i++)
key[i] = tolower(key[i]);
//cout<<key<<endl;
List t = H->list[Hash(key,H->Tablesize)];
List f = Find(key,H);
if(f==NULL)
{
List tmp = (List)malloc(sizeof(node));
tmp->cnt = ;
tmp->line = line;
strcpy(tmp->id,key);
tmp->next = t->next;
t->next = tmp;
}
else
{
if((f->line)!=line)
(f->cnt)++;
}
}
void Findmax(Hashlist H)
{
int max = -,same = ;
char ans[];
for(int i=;i< H->Tablesize;i++)
{
List t = H->list[i];
List p = t->next;
while(p!=NULL)
{
if(p->cnt>max)
{
max = p->cnt;
same = ;
strcpy(ans,p->id);
}
else if(p->cnt==max)
{
if(strcmp(ans,p->id)>)
strcpy(ans,p->id);
same++;
}
p = p->next;
}
}
if(ans[]<='z'&&ans[]>='a')
ans[] = toupper(ans[]);
printf("%s\n%d\n",ans,max);
if(same>)
printf("And %d more ...\n",same-);
}
int main()
{
int n;
char str[];
scanf("%d",&n);
Hashlist H = Init(n);
getchar();
for(int l=;l<=n;l++)
{
gets(str);
char * p;
p = strtok(str,"#");
int cnt = ;
while(p!=NULL)
{
if(cnt%==)
Insert(p,H,l);
cnt++;
p = strtok(NULL,"#");
}
}
Findmax(H);
return ;
}
5-46 新浪微博热门话题 (30分)——unfinished HASH的更多相关文章
- PAT甲级练习 1087 All Roads Lead to Rome (30分) 字符串hash + dijkstra
题目分析: 这题我在写的时候在PTA提交能过但是在牛客网就WA了一个点,先写一下思路留个坑 这题的简单来说就是需要找一条最短路->最开心->点最少(平均幸福指数自然就高了),由于本题给出的 ...
- 04-树6 Complete Binary Search Tree(30 分)
title: 04-树6 Complete Binary Search Tree(30 分) date: 2017-11-12 14:20:46 tags: - 完全二叉树 - 二叉搜索树 categ ...
- PTA 11-散列4 Hard Version (30分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/680 5-18 Hashing - Hard Version (30分) Given ...
- 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中
抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...
- PTA 07-图5 Saving James Bond - Hard Version (30分)
07-图5 Saving James Bond - Hard Version (30分) This time let us consider the situation in the movie ...
- PTA 社交网络图中结点的“重要性”计算(30 分)
7-12 社交网络图中结点的“重要性”计算(30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互 ...
- L3-015 球队“食物链” (30 分)
L3-015 球队“食物链” (30 分) 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席 ...
- PAT A1127 ZigZagging on a Tree (30 分)——二叉树,建树,层序遍历
Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...
- PTA 7-2 二叉搜索树的结构(30 分)
7-2 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大 ...
随机推荐
- LOJ#557. 「Antileaf's Round」你这衣服租来的吗(FHQ Treap+珂朵莉树)
题面 传送门 题解 好吧我是不太会复杂度分析-- 我们对于每种颜色用一个数据结构维护(比方说线段树或者平衡树,代码里写的平衡树),那么区间询问很容易就可以解决了 所以现在的问题是区间修改,如果区间颜色 ...
- random模块思维导图
- [C和指针] 1-快速上手、2-基本概念、3-数据
第1章 快速上手 1.1.1 空白和注释 程序的空白的作用: 空行将程序的不同部分分割开来:制表符缩进语句,可以更好地显示程序的结构等等. 软件最大的开销并非在于编写,而是在于维护,所以需 ...
- Windows及Linux环境下Tomcat的JVM参数调优
Windows环境: catalina.bat文件修改 set JAVA_OPTS=-server -Xms4096m -Xmx4096m -XX:PermSize=512m -XX:MaxPermS ...
- 前端--2、CSS基础
CSS的部分: CSS四种类引入方式(了解) style的定义原则: 基本选择器 示例: 层级选择器 组合选择器 后代选择器 ★ 子代选择器 毗邻选择器 普通兄弟选择器 “与”选择器 ★ “或”选择器 ...
- php angular/think angular/php模版引擎
在thinphp5中发现一个好用的模版引擎—think-angular, 此模板引擎主要特点是 不需要额外的标签定义, 全部使用属性定义, 写好的模板文件在IDE格式化代码的时候很整洁, 因为套完的模 ...
- dede手机端首页点击文章内容、列表,却跳到pc端
手机访问到手机端首页,点击列表.内容.图片等都跳到pc端,是什么原因? 查看m模板里面的index.html文件生成的代码是绝对路径(数字随机)13.html 而不是view.php?aid=13 解 ...
- windows server 2008 如何查看异常重启日志
下面蓝队网络为大家介绍下windows server 2008 如何查看异常重启日志 开始->管理工具->时间查看器 windows日志->系统 筛选当前日志 选择Kernel-Po ...
- 【sqli-labs】 less64 GET -Challenge -Blind -130 queries allowed -Variation3 (GET型 挑战 盲注 只允许130次查询 变化3)
双括号整型 http://192.168.136.128/sqli-labs-master/Less-64/?id=1)) or ((1
- elk 6.3.2 搭建
CentOS7和java1.8.0) 然后登陆elastic的官网地址下载ELK组件:https://www.elastic.co/cn/products 我是下载了6.3.0版本的: elast ...