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 分)相关推荐

  1. 数据结构PTA习题:进阶实验5-3.2 新浪微博热门话题 (30分)

    进阶实验5-3.2 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到 ...

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

    5-46 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在 ...

  3. 7-46 新浪微博热门话题 (30 分)(思路+详解+set + map)pta逐个点过的 来呀兄弟们

    一 :题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题 ...

  4. 7-46 新浪微博热门话题 (30分)--map

    1 #include<iostream> 2 #include <map> 3 #include <string> 4 #include <cstring&g ...

  5. PAT结构与算法7-46 新浪微博热门话题 (50行精简 测试点分析)

    7-46 新浪微博热门话题 (30 分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人 ...

  6. 数据结构PTA 进阶实验5-3.2 新浪微博热门话题

    进阶实验5-3.2 新浪微博热门话题 题目 解法 题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可 ...

  7. 7-46 新浪微博热门话题(字符串)

    题目链接:7-46 新浪微博热门话题 考查知识:字符串 题意描述: 给定n条微博,每条微博里有若干话题,试统计被最多条微博提到的话题. 思路简析: 首先对#号位置进行记录,然后用a.substr(开始 ...

  8. PTA新浪微博热门话题(题面毒瘤)

    这道题的题目描述非常容易让人误解 测试点1容易过掉 一般没有问题 测试点2会出现k等于0的情况 这个时候最后一行是不输出的(题目没有写清楚) 测试点3容易出现PE 实际上是中间的处理过程存在问题 这里 ...

  9. 7-46 新浪微博热门话题

    ➳ENTRY 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话 ...

  10. python爬取新浪微博热门话题保存到excel等文件

    第一步 在网页上登录新浪微博,获取登录cookie 先把它复制好先,进行第二步 第二步 废话不多说,直接上代码,把刚刚复制好的值,赋给co变量 # -*- coding: utf-8 -*- &quo ...

最新文章

  1. 小程序 sha1和服务器有关系吗,微信小程序使用sha1实现密码加密的方法介绍
  2. IOS-资源最小化之点九图片的使用
  3. PyQt5 Introduction and components
  4. 结队项目之需求分析与原型设计
  5. 找对象不能只看TA的外表
  6. URL中包含url参数,(文件路径作为参数)
  7. 告别写笔记,AI 实时转写黑科技来了!
  8. linux三剑客之awk必杀技一例   linux命令
  9. Nginx+Tomcat+Session 高性能群集搭建
  10. 【ML小结10】集成学习
  11. 陈国君Java程序设计基础笔记和习题
  12. xp系统下如何安装windows phone 7的软件xap文件
  13. 获取时间戳及转化为yyyyMMdd格式的时间
  14. 角色个人属性英文缩写
  15. rand()和srand()
  16. 安装MySQL——压缩包安装
  17. android ram rom测试工具,ROM与RAM的那点事,超详细解说
  18. 如何通过容器搭建稳定可靠的私有网盘(NextCloud)
  19. nginx(一)介绍安装
  20. ChatGpt对于学术和程序员的影响

热门文章

  1. 数据统计分析常用指标
  2. 1.3 新概念 可数名词变复数
  3. 通信LOGO隐秘史(设备商篇)
  4. 《构建之法》CH5~6读书笔记 PB16110698 第九周(~5.15)
  5. 使用PHP和NetBeans创建基于XAMPP的动态网页(学习笔记7)(技术笔记7)网站应用和服务器管理 澳大利亚维多利亚大学VIT1204 Web Application and
  6. 浅谈mian函数的参数解析
  7. 23种设计模式:(一)创建者模型
  8. python 版权保护,python爬虫篇4——爬取专利著作权信息
  9. ROS创建launch文件
  10. 布尔运算(Boolean Operators)