计蒜客蓝桥杯省赛模拟G
题目
一天蒜头君得到 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的更多相关文章
- 计蒜客蓝桥杯模拟赛 后缀字符串:STL_map+贪心
问题描述 一天蒜头君得到 n 个字符串 si,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来 ...
- 计蒜客蓝桥杯模拟赛五J. 程序设计:放置守卫
在一张 n 行 m 列的方格地图上放置一些守卫,每个守卫能守护上.左.右三个方向上相邻的方格和自己所在的方格.如下图,红色的方格放置守卫,绿色的方格为该守卫守护的区域. 现在要求在地图上放置若干个守卫 ...
- 计蒜客 蓝桥杯模拟 瞬间移动 dp
在一个 n \times mn×m 中的方格中,每个格子上都有一个分数,现在蒜头君从 (1,1)(1,1) 的格子开始往 (n, m)(n,m) 的格子走.要求从 (x_1,y_1)(x1,y1 ...
- 计蒜客 2017 NOIP 提高组模拟赛(四)Day1 T2 小X的密室
https://nanti.jisuanke.com/t/17323 小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1号房间,而出口在 N号房间. 密室的每 ...
- 计蒜客 蓝桥模拟 B.素数个数
用 0,1,2,3⋯70,1,2,3 \cdots 70,1,2,3⋯7 这 888 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次). 提示:以 000 开始的数字是非法数字. 代 ...
- 计蒜客 蓝桥模拟 A. 结果填空:矩阵求和
给你一个从 n×nn \times nn×n 的矩阵,里面填充 111 到 n×nn \times nn×n .例如当 nnn 等于 333 的时候,填充的矩阵如下. 1 1 2 3 2 4 5 ...
- 计蒜客 蓝桥模拟 I. 天上的星星
计算二维前缀和,节省时间.容斥定理. 代码: #include <cstdio> #include <cstdlib> #include <cstring> #in ...
- 计蒜客 蓝桥模拟 H. 封印之门
Floyd算法,最短路,判断a,b是否相等. 代码: #include <cstdio> #include <cstdlib> #include <cstring> ...
- 计蒜客 蓝桥模拟 F. 结果填空:数独
代码: #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream& ...
- 计蒜客 蓝桥模拟 G. 数列求值
递归式移项得Ai+1 = 2Ai + 2Ci - Ai-1; 1.A2 = 2A1 + 2C1 - A0; 2.A3 = 2A2 + 2C2 - A1; . . . n.An+1 = 2An + 2C ...
随机推荐
- MS12-020 拒绝服务 蓝屏攻击
漏洞概要 MS12-020是一个3389远程桌面rdp协议的一个漏洞 攻击者通过特意构造的rdp数据包发送给靶机3389端口,造成系统崩溃,蓝屏重启 影响范围:windows xp .2003.200 ...
- Spring--案例:数据源对象管理
案例:数据源对象管理 对于已经学过数据库的我来说,这看起来就像是连接数据库的操作: 就像javaweb项目里面的db.properties文件的使用一样,我们需要先导入一个包,(我用的是Maven项目 ...
- 刘勇智:一码通缺陷分析与架构设计方案丨声网开发者创业讲堂 Vol.02
本文内容源自「声网开发者创业讲堂 Vol.02」的演讲分享,分享讲师为 Thoughtworks 专家级咨询师刘勇智.大家可以点击此链接,观看视频回放以及下载讲师 PPT. 从去年年底到现在,随着疫情 ...
- FWT/快速沃尔什变换 入门指南
来学点好玩的. 引入 我们也许学过,\(FFT\) 可以解决一类卷积: \[C_i=\sum^{k+j=i} A_iB_j \] 现在我们稍微变一下式子: \[C_i=\sum^{i=k \And j ...
- 使用Net将HTML简历导出为PDF格式
现在有许多将HTML导出PDF的第三方包,这里介绍使用的是Select.HtmlToPdf.NetCore 使用Select.HtmlToPdf.NetCore 整体思路是将cshtml内容读出来,然 ...
- Centos7端口开放及查看
1.开放端口 firewall-cmd --zone=public --add-port=端口/tcp --permanent eg:firewall-cmd --zone=public --add- ...
- 寻找区间内第k小的数
sort排序 这是最直接暴力的方法,时间复杂度为\(O(nlog_n)\) 直接排序,输出第k小的值即可 #include <iostream> #include <algorith ...
- StringBuilder 导致堆内存溢出
StringBuilder 导致堆内存溢出 原始问题描述: Exception in thread "main" java.lang.OutOfMemoryError: Java ...
- MySQL长时间不登录密码过期解决办法
MySql管理工具 Navicat for MySql的时候,弹出了一个1862 - MySql Your password has expired.To log in you must change ...
- Java中使用List的add方法后元素相同问题
在写JavaWeb时,我在后端通过JDBC读取了数据后逐个使用List.add()方法添加元素并通过request方法传给jsp页面解析,但是添加以后出现了在列表里有n个(假设添加了n个元素)最后一个 ...