计蒜客蓝桥杯省赛模拟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 ...
随机推荐
- IDEA如何使用Maven不通过模板创建javaWeb项目
IDEA如何使用Maven不通过模板创建javaWeb项目 1.创建项目 进入IDEA,点击"项目">"新建项目",填写项目信息,最后点击"创建 ...
- cl 编译器环境配置
安装 visual studio 2019 其他版本路径可能有差别,需自行对照查找. visual studio 2019安装目录 和 Windows kits 文件夹[在同一目录下] 即VS 如果安 ...
- 基于声网 Flat 构建白板插件应用“成语解谜”的最佳实践
前言 本文作者赵杭天.他参加了"2022 RTE 编程挑战赛"--"赛道二 场景化白板插件应用开发" , 并凭借作品"成语解谜"获得了该赛道 ...
- 灵感宝盒新增「线上云展会」产品,「直播观赏联动」等你共建丨RTE NG-Lab 双周报
前言 哈喽各位开发者,「RTE NG-Lab 双周报」如期而至! 近两周,我们更新了一些新的实时互动场景和产品,也举办了代码实验室的第一次线下活动,与大家一起体验了声网最新的 4.0 SDK. 灵感宝 ...
- RTC月度小报5月丨教育aPaaS灵动课堂升级、抢先体验VUE版 Agora Web SDK、声网Agora与HTC达成合作
本月亮点速览 产品与技术: 声网Agora 教育 aPaaS 灵动课堂升级 视频通话/语音通话/互动直播 Native SDK 升级上线 3.4.2 版本 视频通话/语音通话/互动直播 Web SDK ...
- 90 条简单实用的 Python 编程技巧,建议收藏
编码原则 建议 1:理解 Pythonic 概念 -- 详见 Python 中的<Python 之禅> 建议 2:编写 Pythonic 代码 避免不规范代码,比如只用大小写区分变量.使用 ...
- SpringBoot 启动类的原理
SpringBoot启动类上使用 @SpringBootApplication注解,该注解是一个组合注解,包含多个其它注解.和类定义(SpringApplication.run)要揭开 SpringB ...
- VUE中的$set与$delete的原理
我们上文说了,Vue 是通过 Object.defineProperty 和重写数组的原型方法来达到监控数据的目的.但是,在某些情况下,上面两种方案无法做到监控数据的变化,例如: (1):当我们给对象 ...
- 为什么我推荐你使用 systemd timer 替代 cronjob?
概述 前几天在使用 Terraform + cloud-init 批量初始化我的实验室 Linux 机器.正好发现有一些定时场景需要使用到 cronjob, 进一步了解到 systemd timer ...
- python和js实现AES加解密
小白学习中...... AES算法 AES全称为高级加密标准,是Advanced Encryption Standard的首字母简写.详细了解,可以找专门的资料进行学习. 场景 开发一个web网站过程 ...