计蒜客蓝桥杯省赛模拟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 ...
随机推荐
- Spring--案例:数据源对象管理
案例:数据源对象管理 对于已经学过数据库的我来说,这看起来就像是连接数据库的操作: 就像javaweb项目里面的db.properties文件的使用一样,我们需要先导入一个包,(我用的是Maven项目 ...
- 《程序员的自我修养》学习笔记——不一样的hello world【第四弹】
不一样的hello world Linux 的系统调用 通过glibc提供的库函数 glibc 是 Linux 下使用的开源的标准 C 库,它是 GNU 发布的 libc 库,即运行时库.glibc ...
- MySQL查询练习 (转载)
转载 @香草味的橙子 侵删 Evernote Export body, td { font-family: 微软雅黑; font-size: 10pt } mysql查询练习 新建一个查询用的数据库: ...
- 父组件传值给子组件时 ,watch props 监听不到解决方案
watch:{ data:{ immediate:true, handler:function(){ } } }
- JVM常用参数说明
内存相关 通过这些参数可以对JVM的内存分配做调整 Xms 英文解释:Initial heap size(in bytes) 中文释义:堆区初始值 使用方法:-Xms2g 或 -XX:InitialH ...
- VBA GET POST HTTP VBA网络爬虫 最新Excel自动获取股票信息源码 EXCEL自动获取网络数据 最新VBA自动抓取股票数据源码
最新Excel自动获取股票信息源码 EXCEL自动获取网络数据 最新VBA自动抓取股票数据源码 通过接口获取股票数据内容的主要优点包括以下几点: 实时性高:通过访问股票数据接口,可以实时获取到股票的实 ...
- day3 函数的定义和调用,练习编写简单的程序(记录1)
一.函数的定义 可以分为以下两种: 1.函数声明和函数定义分离 这种方法将函数声明和函数定义分开,通常在头文件中先声明函数原型,然后在源文件中实现函数定义. 例如,头文件 example.h 中声明了 ...
- .Net Core后端架构实战【2-实现动态路由与Dynamic API】
摘要:基于.NET Core 7.0WebApi后端架构实战[2-实现动态路由与Dynamic API] 2023/02/22, ASP.NET Core 7.0, VS2022 引言 使用过ABP ...
- LeeCode哈希问题(二)
LeeCode 454: 四数相加II 题目描述 给你四个整数数组 nums1.nums2.nums3 和 nums4,数组长度均为 n ,请你计算有多少个元组 (i, j, k, l) 能满足: \ ...
- 用 hexo 结合 github 从0到1开始搭建属于你的blog
前言 github pages服务搭建博客的好处有: 全是静态文件,访问速度快: 免费方便,不用花一分钱就可以搭建一个自由的个人博客,不需要服务器不需要后台: 可以随意绑定自己的域名,不仔细看的话根本 ...