Codeforces Round #526 (Div. 2) C. The Fair Nut and String
2024-08-29 01:02:23
C. The Fair Nut and String
题目链接:https://codeforces.com/contest/1084/problem/C
题意:
给出一个字符串,找出都为a的子序列(比如ai,aj,ak)满足以下条件的个数:
1.子序列的索引单增(i<j<k);
2.在原字符串中,若ai=aj=ak=a,那么满足i<=k1<j,j<=k2<k 并且 ak1=ak2=b。
通俗点说,就是找这样的子序列个数:要么单个a,要么每个a之间都至少有一个b。
题解:
我们考虑在字符串末尾增加一个”哨兵“,其值为b。然后用b对a进行分割,每一段a 的个数为ai。
最后统计结果:(a1+1)*(a2+1)*...*(ax+1)-1。这里减去1是因为至少没有什么都不选的情况。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+,MOD = 1e9+;
char s[N];
ll a[N];
int main(){
scanf("%s",s);
int len=strlen(s);
s[len]='b';
int num=,cnt=;
for(int i=;i<=len;i++){
if(s[i]=='a') num++;
if(s[i]=='b'){
a[++cnt]=num;
num=;
}
}
ll ans = ;
for(int i=;i<=cnt;i++) ans=ans*(a[i]+)%MOD;
printf("%I64d",ans-);
return ;
}
最新文章
- ASP.NET Core 中间件详解及项目实战
- HA-0302 退役
- pagefile.sys and heberfil.sys
- C#/Access-数据库获取自动编号的最大值
- Tap.js
- Android的消息处理机制(Looper,Handler,Message)(转)
- Jquery EasyUI修改行背景的两种方式
- jvm调优经验分享
- Android支付接入(八):Amazon亚马逊支付
- ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上
- HTML CSS基础(二)
- Xcode使用心得02:如何在项目中关闭ARC特性
- Oracle-02:SQL语言的分类或者说SQL语言的组成
- Linux的文本处理工具浅谈-awk sed grep
- php 把数组保存为标准的数组格式,存储到文件中
- python学习(七)
- 导入appiumlibrary显红
- Environment.NewLine
- SQL集合运算
- SQL Server快速部署作业到多台服务器
热门文章
- ruby 操作csv
- ruby 可枚举模块Enumerable
- 数列分块入门 1 LOJ6277
- SIMD数据并行(四)——三种结构的比较
- python2.7练习小例子(十八)
- 实用脚本 2 -- Linux下定时执行脚本
- php长整型完整输出
- Get Error when restoring database in Sql Server 2008 R2
- Queue模块初识
- sysctl -P 报错解决办法 error: ";net.bridge.bridge-nf-call-ip6tables"; is an unknown key