题目

一天蒜头君得到 n 个字符串 si,每个字符串的长度都不超过 1010。

蒜头君在想,在这 n 个字符串中,以 si 为后缀的字符串有多少个呢?

输入格式

第一行输入一个整数 n。

接下来 n 行,每行输入一个字符串 si。

输出格式

输出 n 个整数,第 i 个整数表示以 si 为后缀的字符串的个数。

数据范围

对于 50%50% 的数据,1≤n≤1031≤n≤103

对于 100%100% 的数据,1≤n≤1051≤n≤105

所有的字符串仅由小写字母组成。

Sample Input

3
ba
a
aba

Sample Output

2
3
1

起初思路

我最开始真的很单纯啊!纯暴力!以为蓝桥杯都是暴力。。。先开始是灵机一动,把字符串反转一下,找后缀就变成了找前缀了,然后用find函数去查找其他的字符串中是否有当前串,如果有并且返回的是0,说明就是一样的前缀,交了一发,妥妥的TLE。

TLE代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e5;
//@start: 2020-10-06 08:10:15 string s[maxn];
int a[maxn];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
a[i]=1;
cin>>s[i];
reverse(s[i].begin(),s[i].end());
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j) continue;
if(s[j].find(s[i])==0) a[i]++;
}
}
for(int i=0;i<n;i++){
printf("%d\n",a[i]);
}
return 0;
}

正确解法

官方给的做题思路是用map<string,int>来存后缀出现的次数。思路很简单,每输入一个字符串,就遍历这个字符串所有的后缀,然后保存在map中,对应的int自加。

正确代码

#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
const int N=1e5; string s[N];
int main()
{
map<string,int> mp;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
for(int j=0;j<s[i].size();j++){
mp[s[i].substr(j)]++;
}
}
for(int i=0;i<n;i++){
cout<<mp[s[i]]<<endl;
}
return 0;
}

string::substr()函数原型

std::__cxx11::string std::__cxx11::string::substr(std::size_t __pos, std::size_t __n = 4294967295U) const
@brief Get a substring.
@param __pos Index of first character (default 0).
@param __n Number of characters in substring (default remainder).
@return The new string.
@throw std::out_of_range If __pos > size(). Construct and return a new string using the @a __n characters starting at @a __pos. If the string is too
short, use the remainder of the characters. If @a __pos is
beyond the end of the string, out_of_range is thrown.

翻译成人话:

s.substr(pos,n);

返回的是从字符串s中从pos位置开始,长度为n的子串。

当然第二个参数也可不传,默认就是返回从pos位置到字符串的结尾。

样例

来个例子立马看懂:

string s="1234";
cout<<s.substr(1)<<endl;//打印234
cout<<s.substr(1,2)<<endl;//打印23

计蒜客蓝桥杯省赛模拟G的更多相关文章

  1. 计蒜客蓝桥杯模拟赛 后缀字符串:STL_map+贪心

    问题描述 一天蒜头君得到 n 个字符串 si​,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si​ 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来  ...

  2. 计蒜客蓝桥杯模拟赛五J. 程序设计:放置守卫

    在一张 n 行 m 列的方格地图上放置一些守卫,每个守卫能守护上.左.右三个方向上相邻的方格和自己所在的方格.如下图,红色的方格放置守卫,绿色的方格为该守卫守护的区域. 现在要求在地图上放置若干个守卫 ...

  3. 计蒜客 蓝桥杯模拟 瞬间移动 dp

      在一个 n \times mn×m 中的方格中,每个格子上都有一个分数,现在蒜头君从 (1,1)(1,1) 的格子开始往 (n, m)(n,m) 的格子走.要求从 (x_1,y_1)(x1​,y1 ...

  4. 计蒜客 2017 NOIP 提高组模拟赛(四)Day1 T2 小X的密室

    https://nanti.jisuanke.com/t/17323 小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1号房间,而出口在 N号房间. 密室的每 ...

  5. 计蒜客 蓝桥模拟 B.素数个数

    用 0,1,2,3⋯70,1,2,3 \cdots 70,1,2,3⋯7 这 888 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次). 提示:以 000 开始的数字是非法数字. 代 ...

  6. 计蒜客 蓝桥模拟 A. 结果填空:矩阵求和

    给你一个从 n×nn \times nn×n 的矩阵,里面填充 111 到 n×nn \times nn×n .例如当 nnn 等于 333 的时候,填充的矩阵如下.   1 1 2 3 2 4 5 ...

  7. 计蒜客 蓝桥模拟 I. 天上的星星

    计算二维前缀和,节省时间.容斥定理. 代码: #include <cstdio> #include <cstdlib> #include <cstring> #in ...

  8. 计蒜客 蓝桥模拟 H. 封印之门

    Floyd算法,最短路,判断a,b是否相等. 代码: #include <cstdio> #include <cstdlib> #include <cstring> ...

  9. 计蒜客 蓝桥模拟 F. 结果填空:数独

    代码: #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream& ...

  10. 计蒜客 蓝桥模拟 G. 数列求值

    递归式移项得Ai+1 = 2Ai + 2Ci - Ai-1; 1.A2 = 2A1 + 2C1 - A0; 2.A3 = 2A2 + 2C2 - A1; . . . n.An+1 = 2An + 2C ...

随机推荐

  1. Android笔记--Application

    Application生命周期 在APP运行过程中有且仅有一个Application对象贯穿整个生命周期 Application全局变量 实例化: 声明全局变量:

  2. 翟佳:StreamNative 组织构建之路丨声网开发者创业讲堂 • 第 5 期

    前言 翟佳,StreamNative 联合创始⼈,Apache Pulsar PMC 成员与 Committer.之前任职于 EMC,担任统⼀存储部⻔技术负责⼈. 在声网开发者创业讲堂 • 第 5 期 ...

  3. Django-5

    Django-5 1.Coookie 1.1 什么是cookie Cookie是储存在浏览器端的一小段文本数据(键值对). 被广泛用于在网站之间传输信息, 当您访问一个网站时,它会将一个Cookie发 ...

  4. RHCE服务---Web

    网站需求:请给openlab搭建web网站 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资 ...

  5. MyBatis 分页(前后端插件)实现

    一.后端使用 PageHelper插件 [1]引入 PageHelper jar包(Maven项目) 1 <dependency> 2 <groupId>com.github. ...

  6. Java面试——RPC

    一.RPC 服务的原理 [1]Socket 套接字:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端称为 Socket.可以实现不同计算机之间的通信,是网络编程接口的具体实现.So ...

  7. git 从本地仓库提交至远程仓库 报错:error: failed to push some refs to "xxx"

    **原因**:远程库里面有个文件,但是本地没有这个文件,比如: README.md,完全提交上去会覆盖之前的文件,所以git会提示报错警告! **解决方案**:如果只有 README.md文件,可以使 ...

  8. [大数据]Hadoop常用命令合集

    hadoop 查看hadoop版本 # hadoop version SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found ...

  9. 【贪心算法】NO134 加油站

    134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升 ...

  10. 2023成都.NET线下技术沙龙圆满结束

    2023年4月15日周六,由MASA技术团队和成都.NET俱乐部共同主办的2023年成都.NET线下技术沙龙活动在成都市世纪城新会展中心知域空间举行,共计报名人数90多人,实际到场60多人,13:30 ...