[Wannafly挑战赛28][B msc和mcc][预处理+枚举]
链接:https://ac.nowcoder.com/acm/contest/217/B
来源:牛客网
题目描述
msc和mcc是一对好朋友,有一天他们得到了一个长度为n的字符串s.
这个字符串s十分妙,其中只有’m’,’s’和’c’三种字符。
定义s[i,j]表示s中从第i个到第j个字符按顺序拼接起来得到的字符串。
定义一个字符串t的子序列为从t中选出一些位置并且将这些位置上面的字符按顺序拼接起来得到的字符串。
两个子序列重合当且仅当存在一个位置x使得两个子序列同时选择了位置x。
由于msc和mcc是一对很好很好的好朋友,所以她们希望选择两个数字x和y满足1≤x≤y≤n使得s[x,y]中同时存在两个**不重合的子序列**使得其中一个是’msc’且另外一个是’mcc’
现在给出n和字符串s,问她们可以选出多少对不同的(x,y)。
输入描述:
第一行一个正整数n,表示字符串s的长度。 第二行一个长度为n的字符串s,其中s只包含字符’m’,’s’和,’c’。(n<100000)
输出描述:
一行一个正整数,表示答案。
题目大意:给一个字符串,求有多少个区间内部存在msc 和 mcc 两个子序列(并且二者不存在公共元素)
题目分析:由于n是1e5级别的,并且是要对区间进行计数,所以只能在O(N)的时间复杂度下得到最终结果,可以想到枚举区间左端点O(N),然后就需要O(1)得到右端点的个数,右端点的个数也就是n-符合条件的最小右端点,所以这个时候只能预处理,而可以知道满足条件的长度为6的子序列只有8种,所以可以预处理出每种情况下的每一个元素后一个元素的位置,然后就能O(1)得到最小右端点了.
#include<iostream>
#include<cstring>
#include<cmath>
#include<map>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
char ch[][]={
"",
"",
"",
"",
"",
"",
"",
""
};
int nx[][],kt[];
char s[];
int main(){
cin>>n;
scanf("%s",s+);
for(int i=;i<=n;i++){
if(s[i]=='m')kt[i]=;
else if(s[i]=='s')kt[i]=;
else kt[i]=;
}
for(int i=;i<;i++){
int pos=n+;
for(int j=n;j>=;j--){
nx[j][i]=pos;
if(kt[j]==i)pos=j;
}
}
ll ans=;
for(int i=;i<=n;i++){
int ed=n+;
for(int j=;j<;j++){
int pos=i-;
for(int k=;k<&&pos<=n;k++){pos=nx[pos][ch[j][k]-''];}
ed=min(ed,pos);
}
ans+=n-ed+;
}
cout << ans << endl;
return ;
}
[Wannafly挑战赛28][B msc和mcc][预处理+枚举]的更多相关文章
- Wannafly挑战赛28
总结- A-开始觉得是找规律,最开始模拟当时我觉得如果L达到1e9的范围的话,岂不是要加1e9次,模拟也就没有认真写,现在想来,后面由于加的不再是1,而是我前面的值,这样相当了一个斐波那契的类型,而斐 ...
- Wannafly挑战赛28 Solution
A:msc和mas Solved. 考虑斐波那契数列,即最多加45次即会超过1e9,直接暴力即可 #include <bits/stdc++.h> using namespace std; ...
- Wannafly挑战赛26-F. msc的棋盘(模型转化+dp)及一类特殊的网络流问题
题目链接 https://www.nowcoder.com/acm/contest/212/F 题解 我们先考虑如果已知了数组 \(\{a_i\}\) 和 \(\{b_i\}\),如何判断其是否合法. ...
- Wannafly挑战赛25游记
Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...
- 【Wannafly挑战赛29F】最后之作(Trie树,动态规划,斜率优化)
[Wannafly挑战赛29F]最后之作(Trie树,动态规划,斜率优化) 题面 牛客 题解 首先考虑怎么计算\([l,r]\)这个子串的不同的串的个数. 如果\(l=1\),我们构建\(Trie\) ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- Wannafly 挑战赛 19 参考题解
这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...
- Wannafly挑战赛21A
题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...
- Wannafly挑战赛24游记
Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...
随机推荐
- unity中导入插件时报错处理办法
错误如下: Unhandled Exception: System.TypeLoadException: Could not load type 'System.ComponentModel.Init ...
- CSS--margin塌陷
margin塌陷 解决方法: 1.给父级顶加上一条线,不太合适. 2.bfc block format context 设定bfc后,特定的盒子会遵循另一套语法规则,解决了margin塌陷 触发bfc ...
- 锤子科技 Smartisan M1L 咖啡金 真皮背面 高配版 5.7
http://www.smartisan.com/m1/#/os 快人一步的OS http://www.smartisan.com/shop/#/buyphone?c=coffee&v= ...
- python -input用户输入
#接收用户输入信息用input就可以了 #还有输入密码的,也就是隐藏的,pycharm中不好用,要到命令行去 import getpass name = input('name:') age = in ...
- jquery 操作table样式拖动参考
参考: http://blog.csdn.net/kdiller/article/details/6059727 http://www.jb51.net/article/59795.htm
- MYSQL的存储函数
创建存储函数与创建存储过程大体相同,格式如下: create function sp_name([func_parameter[,...]]) returns type [characteristic ...
- Sql Server 中 根据列名查询表名
已知列名 ELEMENT_ID ,查询所属表名称 Select O.name objectName, C.name ColumnName from sys.columns C inner join s ...
- android 获取Asset中Properties文件配置的键值对
1 获取 AssetManager AssetManager assetManager = context.getApplicationContext().getAssets(); 2 获取流 Str ...
- elk之elasticsearch安装
环境: centos7 jdk8 参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.htmlhttp:// ...
- vue-router + ElementUI实现NavMenu 导航菜单 选中状态的切换
elemen-ui官方网站:http://element.eleme.io/#/zh-CN/component/menu 新手小白利用vue+element-ui尝试搭建后台管理系统, 效果是这样的, ...