PTA:7-46 新浪微博热门话题 (30 分)
7-46 新浪微博热门话题 (30 分)
新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。
本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。
输入格式:
输入说明:输入首先给出一个正整数N(≤10的5次方 ),随后N行,每行给出一条英文微博,其长度不超过140个字符。任何包含在一对最近的#中的内容均被认为是一个话题,输入保证#成对出现。
输出格式:
第一行输出被最多条微博提到的话题,第二行输出其被提到的微博条数。如果这样的话题不唯一,则输出按字母序最小的话题,并在第三行输出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 ...
代码思路见注释
//建立一个结构体,针对每行输入进行处理,一个字符串保存辨识id,一个字符串保存输出的话题
//一个int保存该话题被提到了多少次 ,利用map辨别当前的topic有没有已经输入过,如果已经输入过则跳过
//每一次换行,用m.clear()清空map中的映射
//最开始理解错题意了,所以使用了两个字符串,实际结构体中的两个字符串是一样的
#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>//需要使用vector存储topic
using namespace std;
struct topic{char id[200];char outp[200];int cnt;
};
vector<topic> v;
map<string,int> m;//每一条微博里所记录该topic是否出现过,若出现过则不处理直接跳过。
map<string,int> ms;//总的记录topic是否出现过,若未出现过,加入其中,出现过则cnt+1;
bool cmp(topic a,topic b){//用来对topic的热度进行排序的规则 int apos=0;int bpos=0;if(a.cnt==b.cnt){while(a.id[apos]==b.id[bpos]){apos++;bpos++;}return a.id[apos]<b.id[bpos];}return a.cnt>b.cnt;
}
int main(){char tmp[200];int N;scanf("%d",&N);getchar();for(int i=0;i<N;i++){m.clear();cin.getline(tmp,200);//这里注意开稍微大一点 string h1,h2;topic t1;//h1,h2用来帮忙处理字符串 h1=tmp;int l=h1.length();bool flag=false;//用来处理字符串中的连续空格 bool flag1=false;char sv1[200];int size1=0;//用来接收分割下来的字符串 char sv2[200];int size2=0;//sv1用来保存用来辨别的id,sv2用来保存用来输出的字符串 for(int j=0;j<l;j++){if(tmp[j]=='#'){size1=0;size2=0;j++;while(tmp[j]!='#'){//以下是对两个数组的操作,可以看出来最终修改后是一样的,一开始理解错题意了设置了两个 if(tmp[j]>='A'&&tmp[j]<='Z'){//其实一个就行了 sv1[size1++]=tmp[j]-'A'+'a';sv2[size2++]=tmp[j]-'A'+'a';flag=false;flag1=false;}else if(tmp[j]>='a'&&tmp[j]<='z'){sv1[size1++]=tmp[j];sv2[size2++]=tmp[j];flag=false;flag1=false;}else if(tmp[j]>='0'&&tmp[j]<='9'){sv2[size2++]=tmp[j];flag=false;sv1[size1++]=tmp[j];flag1=false;}else{if(!flag&&size2!=0){sv2[size2++]=' ';flag=true;}if(!flag1&&size1!=0){sv1[size1++]=' ';flag1=true;}}j++;}if(sv1[size1-1]==' ')sv1[size1-1]='\0';elsesv1[size1]='\0';//人工置字符串结束标记 if(sv2[size2-1]==' ')sv2[size2-1]='\0';elsesv2[size2]='\0';
// int k=0;
// while(1){
// if(sv2[k]>='a'&&sv2[k]<='z')
// break;
// k++;
// }
// sv2[k]=sv2[k]-'a'+'A';if(sv2[0]>='a'&&sv2[0]<='z')sv2[0]=sv2[0]-'a'+'A';
// printf("%s %s\n",sv1,sv2);h1=sv1;h2=sv2;if(m.find(h1)==m.end()){//在当前微博中是否出现过这个话题if(ms.find(h1)==ms.end()){//在总的微博中是否出现过这个话题 strcpy(t1.id,sv1);strcpy(t1.outp,sv2);
// t1.id=h1;t1.outp=h2;t1.cnt=1;v.push_back(t1);m[h1]=v.size()-1;ms[h1]=v.size()-1;} else{m[h1]=ms[h1];v[ms[h1]].cnt++;}}}}}sort(v.begin(),v.end(),cmp);
// cout<<v[0].outp<<endl;printf("%s\n",v[0].outp);printf("%d\n",v[0].cnt);int ans=0;for(int i=1;i<v.size();i++){if(v[i].cnt==v[0].cnt)ans++;elsebreak;}if(ans!=0)printf("And %d more ...\n",ans);return 0;
}
PTA:7-46 新浪微博热门话题 (30 分)相关推荐
- 数据结构PTA习题:进阶实验5-3.2 新浪微博热门话题 (30分)
进阶实验5-3.2 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到 ...
- 5-46 新浪微博热门话题 (30分)
5-46 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在 ...
- 7-46 新浪微博热门话题 (30 分)(思路+详解+set + map)pta逐个点过的 来呀兄弟们
一 :题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题 ...
- 7-46 新浪微博热门话题 (30分)--map
1 #include<iostream> 2 #include <map> 3 #include <string> 4 #include <cstring&g ...
- PAT结构与算法7-46 新浪微博热门话题 (50行精简 测试点分析)
7-46 新浪微博热门话题 (30 分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人 ...
- 数据结构PTA 进阶实验5-3.2 新浪微博热门话题
进阶实验5-3.2 新浪微博热门话题 题目 解法 题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可 ...
- 7-46 新浪微博热门话题(字符串)
题目链接:7-46 新浪微博热门话题 考查知识:字符串 题意描述: 给定n条微博,每条微博里有若干话题,试统计被最多条微博提到的话题. 思路简析: 首先对#号位置进行记录,然后用a.substr(开始 ...
- PTA新浪微博热门话题(题面毒瘤)
这道题的题目描述非常容易让人误解 测试点1容易过掉 一般没有问题 测试点2会出现k等于0的情况 这个时候最后一行是不输出的(题目没有写清楚) 测试点3容易出现PE 实际上是中间的处理过程存在问题 这里 ...
- 7-46 新浪微博热门话题
➳ENTRY 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话 ...
- python爬取新浪微博热门话题保存到excel等文件
第一步 在网页上登录新浪微博,获取登录cookie 先把它复制好先,进行第二步 第二步 废话不多说,直接上代码,把刚刚复制好的值,赋给co变量 # -*- coding: utf-8 -*- &quo ...
最新文章
- 小程序 sha1和服务器有关系吗,微信小程序使用sha1实现密码加密的方法介绍
- IOS-资源最小化之点九图片的使用
- PyQt5 Introduction and components
- 结队项目之需求分析与原型设计
- 找对象不能只看TA的外表
- URL中包含url参数,(文件路径作为参数)
- 告别写笔记,AI 实时转写黑科技来了!
- linux三剑客之awk必杀技一例 linux命令
- Nginx+Tomcat+Session 高性能群集搭建
- 【ML小结10】集成学习
- 陈国君Java程序设计基础笔记和习题
- xp系统下如何安装windows phone 7的软件xap文件
- 获取时间戳及转化为yyyyMMdd格式的时间
- 角色个人属性英文缩写
- rand()和srand()
- 安装MySQL——压缩包安装
- android ram rom测试工具,ROM与RAM的那点事,超详细解说
- 如何通过容器搭建稳定可靠的私有网盘(NextCloud)
- nginx(一)介绍安装
- ChatGpt对于学术和程序员的影响
热门文章
- 数据统计分析常用指标
- 1.3 新概念 可数名词变复数
- 通信LOGO隐秘史(设备商篇)
- 《构建之法》CH5~6读书笔记 PB16110698 第九周(~5.15)
- 使用PHP和NetBeans创建基于XAMPP的动态网页(学习笔记7)(技术笔记7)网站应用和服务器管理 澳大利亚维多利亚大学VIT1204 Web Application and
- 浅谈mian函数的参数解析
- 23种设计模式:(一)创建者模型
- python 版权保护,python爬虫篇4——爬取专利著作权信息
- ROS创建launch文件
- 布尔运算(Boolean Operators)