【题解】FBI序列
题目描述
两伙外星人策划在未来的XXXX年侵略地球,侵略前自然要交换信息咯,现在,作为全球保卫队队长,你截获了外星人用来交换信息的一段仅由“F”,“B”,“I”,“O”组成的序列。为了保卫地球和平,为了使家园不受破坏,你要机智地破解密码,勇敢地迎击外星人!记住,你不是一个人在战斗!你不是一个人!你的背后是千千万万的地球人!
输入输出格式
输入格式
一组仅由“F”、“B”、“I”、“0”组成的序列(“F”、“B”、“I”、“0”这四个字母中的某一个或某几个不一定会出现,且保证序列长度≤2000)
规定这个序列所要传达的信息就是这组序列有多少个“FBI”(子序列)
输出格式
一行,一个数,表示这组序列有多少个“FBI”的子序列(保证答案≤2^31,且FBI必须是正序,即IBF或者BIF或者FIB或者BFI或者IFB都不能算是一个FBI)
输入输出样例
输入样例
FBIIBFOI
输出样例
4
题解
朴素做法很明显,枚举F,B,I的位置,暴力统计,时间复杂度O(n³),数据水的话还能卡过去。
显然我们不能用这种做法。可以考虑枚举B的位置i(假设从1开始计数),然后统计字符串的第一位到第i-1位里F的数量和第i+1位到第n位I的数量,根据乘法原理统计结果,而事实上统计F,I的数量也可以用两个变量维护,枚举i的过程中判断要不要更改这两个变量,这样即可做到O(n)的时间复杂度。
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; char s[];
int len;
int cnt_F, cnt_I;
int ans; int main()
{
scanf("%s", s);
len = strlen(s);
for(register int i = ; i < len; ++i)
{
if(s[i] == 'I') ++cnt_I;
}
for(register int i = ; i < len; ++i)
{
if(s[i] == 'B') ans += cnt_F * cnt_I;
else if(s[i] == 'F') ++cnt_F;
else if(s[i] == 'I') --cnt_I;
}
printf("%d", ans);
}
参考程序
【题解】FBI序列的更多相关文章
- 题解-[HNOI2016]序列
题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 ...
- [题解] [SDOI2017] 序列计数
题面 题解 和 SDOI2015 序列统计 比较像 这个无非就是把乘改成了加, NTT 改成了 MTT 再加上了一个小小的容斥 : 拿所有方案减去不合法方案即可 Code #include <a ...
- [题解] [SDOI2015] 序列统计
题面 题解 设 \(f[i][j]\) 代表长度为 \(i\) 的序列, 乘积模 \(m\) 为 \(j\) 的序列有多少个 转移方程如下 \[ f[i + j][C] = \sum_{A*B\equ ...
- 题解-bzoj1283序列 & bzoj4842 [Neerc2016]Delight for a Cat
因为这两题有递进关系,所以放一起写 Problem bzoj1283 序列 题意概要:一个长度为 \(n\) 的序列\(\{c_i\}\),求一个子集,使得原序列中任意长度为 \(m\) 的子串中被选 ...
- bzoj1211树的计数 x bzoj1005明明的烦恼 题解(Prufer序列)
1211: [HNOI2004]树的计数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3432 Solved: 1295[Submit][Stat ...
- 题解 [HNOI2019]序列
题目传送门 题目大意 给出一个\(n\)个数的数列\(A_{1,2,...,n}\),求出一个单调不减的数列\(B_{1,2,...,n}\),使得\(\sum_{i=1}^{n}(A_i-B_i)^ ...
- [题解]BZOJ1004 序列函数
原题找不到了,应该是usaco之类的题目吧.给一个可以交题的链接:http://www.cqoi.net:2012/problem.php?id=1004 思路:将素数一个一个往里乘,保证扫描的顺序是 ...
- BZOJ4416 [Shoi2013]阶乘字符串 【序列自动机 + 状压dp】
题目链接 BZOJ4416 题解 建立序列自动机,即预处理数组\(nxt[i][j]\)表示\(i\)位置之后下一个\(j\)出现的位置 设\(f[i]\)表示合法字符集合为\(i\)的最短前缀,枚举 ...
- 【bzoj1430】小猴打架 Prufer序列
题目描述 给出 $n$ 个点,每次选择任意一条边,问这样 $n-1$ 次后得到一棵树的方案数是多少. 输入 一个整数N. 输出 一行,方案数mod 9999991. 样例输入 4 样例输出 96 题解 ...
随机推荐
- ROS launch 文件的编写
ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系统都可 ...
- JAVA程序员必看的15本书-JAVA自学书籍推荐
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- VBA读取、增加自定义和修改文档属性
读取系统文档属性 Sub read()On Error Resume Nextrw = 1Worksheets(1).ActivateFor Each p In ActiveWorkbook.Buil ...
- 深入解析Java中的装箱和拆箱
自己主动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最主要的东西,再来看一以下试笔试中常常遇到的与装箱.拆箱相关的问题. 下面是本 ...
- HUE配置HBase
HBase的配置 修改配置hue.ini的配置文件 [hbase] hbase_clusters=(Cluster|node1:) hbase_conf_dir=/usr/hbase-0.98.12. ...
- 20155302《网络对抗》Exp6 信息收集与漏洞扫描
20155302<网络对抗>Exp6 信息收集与漏洞扫描 实验内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测 ...
- 【第三方插件】使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- Aspose.Cells.dll的用法
public void OutExcel() { #region WorkbookDesigner designer = new WorkbookDesigner(); Worksheet sheet ...
- 使用 vi/vim 时,粘贴进新创建文件或空文件的首行内容丢失的解决方法
只需要进入插入模式后,回车空一行或几行,再粘贴,再把上面的几个空行back回去,就不会丢失首行的内容了.
- 利用Kinect实现用指尖隔空控制鼠标(源码放出)
简介 此程序为利用Kinect实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那个项目中鼠标的click是通过一种特殊的方式实现的,因此这个程序只实现了用手控制鼠标的移动,并没有点击的功能. ...