5-46 新浪微博热门话题   (30分)

新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。

本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。

输入格式:

输入说明:输入首先给出一个正整数NN(\le 10^5≤10​5​​),随后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的更多相关文章

  1. PAT甲级练习 1087 All Roads Lead to Rome (30分) 字符串hash + dijkstra

    题目分析: 这题我在写的时候在PTA提交能过但是在牛客网就WA了一个点,先写一下思路留个坑 这题的简单来说就是需要找一条最短路->最开心->点最少(平均幸福指数自然就高了),由于本题给出的 ...

  2. 04-树6 Complete Binary Search Tree(30 分)

    title: 04-树6 Complete Binary Search Tree(30 分) date: 2017-11-12 14:20:46 tags: - 完全二叉树 - 二叉搜索树 categ ...

  3. PTA 11-散列4 Hard Version (30分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/680 5-18 Hashing - Hard Version   (30分) Given ...

  4. 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中

    抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...

  5. 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 ...

  6. PTA 社交网络图中结点的“重要性”计算(30 分)

    7-12 社交网络图中结点的“重要性”计算(30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互 ...

  7. L3-015 球队“食物链” (30 分)

    L3-015 球队“食物链” (30 分)   某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席 ...

  8. 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 ...

  9. PTA 7-2 二叉搜索树的结构(30 分)

    7-2 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大 ...

随机推荐

  1. 01背包(类) UVA 10564 Paths through the Hourglass

    题目传送门 /* 01背包(类):dp[i][j][k] 表示从(i, j)出发的和为k的方案数,那么cnt = sum (dp[1][i][s]) 状态转移方程:dp[i][j][k] = dp[i ...

  2. 转 PHP - AJAX 与 PHP

    1. AJAX 被用于创建交互性更强的应用程序. AJAX PHP 实例 下面的实例将演示当用户在输入框中键入字符时,网页如何与 Web 服务器进行通信: 实例 尝试在输入框中输入一个名字,如:Ann ...

  3. iOS浏览器不能打开手机QQ客服与指定用户聊天界面

    这个问题是我在公司需求的时候遇到的,QQ推广工具网站获取的链接在苹果自带浏览器没法打开到聊天界面,是因为safair在打开到app store的时候把参数给丢了,app store再打开到QQ的时候就 ...

  4. C++学习笔记(二)之数组

    数组作形参时,实际传入数组首地址 void print(const int*) void print(const int []) ]) 三种方法等价

  5. phpcms v9文章内容页调用上一篇下一篇的方法(转)

    phpcms v9文章内容页调用上一篇下一篇的方法如下,魔客吧(www.moke8.com)提示您直接摘取如下代码中的红色部分即可: 上一篇:{$previous_page[url]}" t ...

  6. HDU_1175_连连看

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1175 大意:连连看规则,只能转两次弯,先输入矩阵0表示没有棋子,正整数表示不同的棋子,然后询问,输入两点坐 ...

  7. CAD把控件图形变成二进制流输出(com接口VB语言)

    主要用到函数说明: _DMxDrawX::WriteBinStream 把控件图形变成二进制流输出,详细说明如下: 参数 说明 VARIANT* pVarBinArray 输出二进制数组.是个byte ...

  8. 手机中快速看图,浏览编辑DWG 梦想极光CAD

    梦想极光CAD6.0(2016.3.1) 手机版最新更新 1.增加手机上,图纸浏览时预览功能 2.增加直接从手机,QQ接收目录下加载文件功能 3.手机交互界面优化 4.增加新建图纸功能 5.增加缓存功 ...

  9. Pytorch 加载保存模型【直播】2019 年县域农业大脑AI挑战赛---(三)保存结果

    在模型训练结束,结束后,通常是一个分割模型,输入 1024x1024 输出 4x1024x1024. 一种方法就是将整个图切块,然后每张预测,但是有个不好处就是可能在边界处断续. 由于这种切块再预测很 ...

  10. ORB-SLAM2:一种开源的VSLAM方案(译文)

    摘要: ORB-SLAM2是基于单目,双目和RGB-D相机的一套完整的SLAM方案.它能够实现地图重用,回环检测和重新定位的功能.无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车, ...