新浪微博热门话题
2018-01-07 12:27
246 查看
新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。
本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。
输入说明:输入首先给出一个正整数N(≤),随后N行,每行给出一条英文微博,其长度不超过140个字符。任何包含在一对最近的
第一行输出被最多条微博提到的话题,第二行输出其被提到的微博条数。如果这样的话题不唯一,则输出按字母序最小的话题,并在第三行输出
注意:两条话题被认为是相同的,如果在去掉所有非英文字母和数字的符号、并忽略大小写区别后,它们是相同的字符串;同时它们有完全相同的分词。输出时除首字母大写外,只保留小写英文字母和数字,并用一个空格分隔原文中的单词。
本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。
输入格式:
输入说明:输入首先给出一个正整数N(≤),随后N行,每行给出一条英文微博,其长度不超过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 ...
/* 题目描述有错误,长度即使超过40也要全部保存 另外此题中不能用strlwr等类似转换大小写函数 */ #include <bits/stdc++.h> using namespace std; typedef struct Node { string key; int num; }Node; bool cmp(Node a, Node b) { if(a.num == b.num) return a.key < b.key; return a.num > b.num; } Node a[100010]; typedef Node *NodePtr; map<string, int> mp; set<string>ans, cur; void solve() { int cnt = 0, max_v, key_num = 0; for(set<string>::iterator it = ans.begin(); it != ans.end(); ++it) { a[key_num].key = *it; a[key_num].num = mp[*it]; key_num++; } sort(a, a + key_num, cmp); max_v = a[0].num; for(int i = 0; i < key_num; ++i) { if(max_v == a[i].num) cnt++; else break; } a[0].key[0] = 'A' + a[0].key[0] - 'a'; cout << a[0].key << endl; printf("%d\n", a[0].num); if(cnt - 1 != 0) printf("And %d more ...", cnt - 1); } int main() { set<string>::iterator it; int n, len; char input[150]; scanf("%d", &n); for(int i = 1; i <= n; ++i) { cur.clear(); int p = 0, num = 0; int pos[150]; char processed[150]; if(i == 1) getchar(); gets(input); len = strlen(input); for(int j = 0; j < len; ++j) { if(input[j] == '#' || isalnum(input[j])) { if(input[j] == '#') pos[num++] = p; if(input[j] >= 'A' && input[j] <= 'Z') input[j] = 'a' + input[j] - 'A'; processed[p++] = input[j]; } else processed[p++] = ' '; } processed[p] = '\0'; char key[num / 2 + 1][140]; for(int j, k = j = 0; j < num / 2; ++j, k += 2) { int flag = 0; len = 0; for(int d = pos[k] + 1; d < pos[k + 1]; d++) { if(processed[d] != ' ') { key[j][len++] = processed[d]; flag = 1; } else { if(flag == 1) { key[j][len++] = ' '; } flag = 0; } } if(key[j][len - 1] == ' ') len--; key[j][len] = '\0'; } for(int j = 0; j < num / 2; ++j) { if(key[j][0] != '\0') cur.insert(key[j]); ans.insert(key[j]); } for(it = cur.begin(); it != cur.end(); ++it) { mp[*it]++; } } solve(); }
相关文章推荐
- Python 获取新浪微博的热门话题 (API)
- 新浪微博数据挖掘(python)本周人们在讨论的热门话题的提取
- 《数据结构学习与实验指导》5-7:新浪微博热门话题
- PTA 7-18 新浪微博热门话题
- [置顶] 【python 新浪微博爬虫】python 爬取新浪微博24小时热门话题top500
- Python 获取新浪微博的热门话题 (API)
- 5-46 新浪微博热门话题 (30分)
- 5-46 新浪微博热门话题 (30分)——unfinished HASH
- PTA 7-18(查找) 新浪微博热门话题(30 分) 30分代码 (已更新)
- (python)热门话题的某些微博评论和转发数的抓取
- 局域网聊天 一个十分热门的话题
- 从热门话题世界这么大我想去看看想到的:年轻人该如何改变这个世界 无力感越来越强,最后却成为了力量
- QCon所见和所得:杭州QCon热门技术话题分享
- 热门话题:使用WCF实现SOA面向服务编程—— 架构设计(附原代码)
- QCon所见和所得:杭州QCon热门技术话题分享
- python爬虫入门 实战(四)---爬“榜姐”话题微博及热门评论
- 比特币荣登全球热门话题榜单第二位
- 热门话题:使用WCF实现SOA面向服务编程(一)——SOA的概念
- 局域网聊天 一个十分热门的话题
- [Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)