8.14 fbi 2690
来源:互联网 发布:b2b源码php 编辑:程序博客网 时间:2024/05/21 05:56
- 题目
- 题解
- 代码
题目
两伙外星人策划在未来的XXXX年侵略地球,侵略前自然要交换信息咯,现在,作为全球保卫队队长,你截获了外星人用来交换信息的一段仅由’F’,’B’,’I’,’O’,组成的序列,为了保卫地球和平,为了使家园不受破坏,你要机智地破解密码,勇敢地迎击外星人!记住,你不是一个人在战斗!你不是一个人!你的背后是千千万万的地球人!
一组仅由’F’,’B’,’I’,’O’,组成的序列(’F’,’B’,’I’,’O’这四个字母中的某一个或某几个不一定会出现,且保证序列长度<=2000)
规定这个序列所要传达的信息就是这组序列有多少个’FBI’(子序列)
一个数,表示这组序列有多少个’FBI’的子序列(保证答案<=2^31,且FBI必须是正序,即IBF或者BIF或者FIB或者BFI或者IFB都不能算是一个FBI)
题解
我想这大概算是O(n)的算法,嗯,亏我打了半天(小时),人家暴力都过了!好气啊,早知道打暴力了
具体做法:
记录’F”B’下一个出现的位置,记录’F”B’下一个’B”I’出现的位置,记录还有多少个’I’,然后累加答案。例:
F B I I B F O Ic={2,3,0,0,8,0,0,0}//下一个出现的位置,类似链表f={6,5,0,0,0,0,0,0}//仍类似链表a={0,0,3,2,0,0,0,1}//还有多少个'I'
代码
var s:ansistring; i,j,k,l,t,x,ans:longint; a,f,c:array[0..2005]of longint;begin assign(input,'fbi.in'); assign(output,'fbi.out'); reset(input);rewrite(output); readln(s); if (pos('F',s)=0)or(pos('B',s)=0)or(pos('I',s)=0) then begin writeln(0);exit;end; for i:=length(s) downto 1 do begin if s[i]='F' then begin c[i]:=k;f[i]:=j;j:=i;end; if s[i]='B' then begin c[i]:=l;f[i]:=k;k:=i;end; if s[i]='I' then begin a[i]:=a[l]+1;l:=i;end; end; while j>0 do begin t:=c[j]; while t>0 do begin x:=c[t]; ans:=ans+a[x]; t:=f[t]; end; j:=f[j]; end; writeln(ans); close(input);close(output);end.
阅读全文
0 0
- 8.14 fbi 2690
- FBI树(fbi)
- FBI阅人术
- FBI树
- FBI lietome
- FBI树
- FBI树
- FBI树
- FBI树
- fbi树
- FBI树
- FBI树
- FBI树
- FBI树
- FBI树
- FBI Tree
- FBI序列
- FBI树
- 【FFT】BZOJ2194 快速傅立叶之二
- JavaScript创建对象
- 基于css和jQuery实现轮播图
- synchronized锁住的是代码还是对象
- 383. Ransom Note
- 8.14 fbi 2690
- Canvas 时钟小案例
- Ice_cream’s world II HDU
- 顾客是上帝 Keep the Customer Satisfied uva1153
- LCA离线模板(Tarjan)倍增模板 hdu2586
- 字符串的“加密”
- window10系统安装失败之Windows安装程序无法将Windows配置为在此计算机的硬件上运行
- 从CAS和原子类看unsafe
- C++学习(前言)