科林明伦杯哈尔滨理工大学第八届程序设计竞赛——Hrbust-2378 小H的问题(模拟)
Description
小H是一个可爱的女孩,她特别喜欢看推特(tweeter)。有一天她得到了某位用户的一些推特消息,想从中提取出这个用户在这些消息中@了哪些人。但是这些消息太长了,她想请你来帮她完成这个任务。
每条消息中只会包含ASCII编码中的可见字符与空格。
推特中用户名的定义为一个长度大于0的字符串,且字符串中只包括数字0-9,英文字符a-z与A-Z,’-’与’_’。用户名区分大小写。
对@一个人的判定方式为:在消息中出现了”@username”,其中username为一个用户名,且为’@’后面所能匹配到最长的用户名。如”@TOM”,只能得到用户名TOM而不能得到用户名TO。同时’@’前面不能是一个合法的用户名字符,我们以此排除所有的邮箱信息。如”x@qq.com”我们不会提取出用户名,但”.@qq.com”我们要从中提取出”qq”。
Input
输入数据第一行为T,代表数据组数。(T<=5)
对于每组数据,第一行为n,代表推特消息数。接下来的n行中,每一行有一条长度小于140的推特消息。(n<=5)
Output
对于每组数据,第一行为k,代表n条消息中共@了多少个人(若同一个人被@了不止一次,则我们只记录一次)。接下来的k行中,每一行输出一个被@的用户名,k个用户名按照字典序排序。
Sample Input
2
5
@all, wish you have a nice contest~~~
Good Luck with you, @Contestant, @HUST!
Have Fun! :-) @All
Competition Topics By @HIT-CCPC
All Copyright Reserved @CCPC2018, @HIT-CCPC
4
HIT@CCPC
@HUST
@HIT-CCPC
@CCPC2018
Sample Output
6
All
CCPC2018
Contestant
HIT-CCPC
HUST
all
3
CCPC2018
HIT-CCPC
HUST
一个简单的模拟题,如果运气不好代码哪里没注意或者少考虑了情况修bug就会修死人的。。。运气还行当时一发就过了。主要就是查找字符串中的@,然后对@前后的情况进行一个判断,因为题目中说明了@前必须不能是合法字符,此处判断一下,特判一下@在字符串首位的时候,还有就是@后一位的位置要判断,是否合法,才能判断此处是不是一个应该录入的名字。
然后一些特殊情况,连续 的几个@@@@@以及@前后都是空格,当然这一并考虑到@左右是否是合法字符里的情况了。基本上就是这样,听说很多大佬被卡了很久。。。。
此处去重用的map标记,记录字符串用的vector存储。
#include<stdio.h>
#include<string.h>
#include<vector>
#include<map>
#include<algorithm>
#include<iostream>
#include<string>
#define LL long long
using namespace std;
const LL MOD=1000000007;
char a[150];
bool judge(int pos)
{if((a[pos]>='0'&&a[pos]<='9')||(a[pos]>='A'&&a[pos]<='Z')||(a[pos]>='a'&&a[pos]<='z')||a[pos]=='-'||a[pos]=='_')return true;return false;
}
int main()
{int t,n;vector<string>ans;map<string,bool>vis;scanf("%d",&t);while(t--){ans.clear();vis.clear();scanf("%d",&n);getchar();while(n--){gets(a);
// printf("%d......%s\n",n,a);int len=strlen(a);for(int i=0; i<len; i++){if(a[i]=='@'&&judge(i+1)){if(i==0){i++;string tmp;tmp.clear();while(judge(i)) tmp+=a[i++];
// cout<<tmp<<endl;if(!vis[tmp]){vis[tmp]=true;ans.push_back(tmp);}}else if(!judge(i-1)){i++;string tmp;tmp.clear();while(judge(i)) tmp+=a[i++];if(!vis[tmp]){vis[tmp]=true;ans.push_back(tmp);}}}}}sort(ans.begin(),ans.end());printf("%d\n",ans.size());for(int i=0; i<ans.size(); i++) cout<<ans[i]<<endl;}
}
科林明伦杯哈尔滨理工大学第八届程序设计竞赛——Hrbust-2378 小H的问题(模拟)相关推荐
- 【数论想法题】小C的问题 @科林明伦杯哈尔滨理工大学第八届程序设计竞赛...
Time Limit: 1000 MS Memory Limit: 256000 K Description 小C是一个可爱的女孩,她特别喜欢世界上最稳定的图形:三角形.有一天她得到了n根木棍,她把这 ...
- B-GT‘s Dream “科林明伦杯“哈尔滨理工大学第八届程序设计竞赛
题目链接 GT's Dream 题解 思路 两个操作,对于第一个操作--合并,需要使用并查集:对于第二个操作--查询,使用树状数组. 我们使用树状数组维护一个前缀和.数组下标表示人数,元素表示在树状数 ...
- 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛B(减成1)
科林明伦杯"哈尔滨理工大学第十届程序设计竞赛 存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多少次操作,可以让所有数都变成1. 数据保证一定有解. 输入描述: 输入t, ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解
"科林明伦杯"哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解 萌新又来写题解啦 原题链接 B 减成一 题意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多 ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛 E 赛马 python
"科林明伦杯"哈尔滨理工大学第十届程序设计竞赛 E 赛马 python E 好家伙 田忌赛马真就 匹配就不解释了 思路,主要咱不止一匹马 所以就最好的比 对方比这个数小的即可 所以 ...
- 科林明伦杯哈尔滨理工大学第六届程序设计团队赛(12.10)
"科林明伦杯"哈尔滨理工大学第六届程序设计团队赛 水题已去除.. B题 Time 原题链接:http://acm.hrbust.edu.cn/index.php?m=Proble ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)---全题目+题解
文章目录 A.点对最大值 B.减成一 C.面积 D.扔硬币 E.赛马 F.三角形 G.养花 H.直线 I.字典序 J.最大值 A.点对最大值 链接:https://ac.nowcoder.com/ac ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) F
F 三角形 链接:https://ac.nowcoder.com/acm/contest/5758/F 来源:牛客网 小明有一根长度为a的木棒,现在小明想将木棒分为多段(每段木棒长度必须为整数), 使 ...
- 科林明伦杯 哈尔滨理工大学第十届程序设计竞赛 (补)
B减成一 利用差分数组,把前后差为正的数都加起来,这里a[0]要设置为1. #include <iostream> #define ll long longusing namespace ...
最新文章
- 什么是生成模型和GAN?一文体验计算机视觉的魔力
- LAMP:用yum安装
- Golang的模板与渲染
- 从司法领域看阿里云产业AI策略:生态联盟,技术赋能
- PCTFREEITLCONSISTANT READ
- 如何在计算机中快速新建TXT文本文档
- Linux相关配置VMware安装
- 谷歌浏览器安装插件的方法步骤
- 基于51单片机+SG90舵机
- VMware Workstation 15 Player 共享文件夹制作
- 论文解读:FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradig
- cs1.6 服务器制作,反恐精英CS1.6服务器建设简明手册
- iOS 上的FlexBox布局
- 团组织关系的转接流程
- 计算机故障声音,不同的电脑故障声音分别是什么意思【详解】
- 任务栏信息栏中图标闪动
- ioca0中断 pic单片机_PIC单片机
- Happy Father's Day 告诉父亲你爱他
- Mysql学习之优化篇
- 智能家居市场中zigbee通信技术与RF315/433通信技术的区别