寻找羔羊
来源:互联网 发布:apache forbidden 编辑:程序博客网 时间:2024/04/29 09:29
【问题描述】
给定一个由小写字母组成的字符串,寻找包含“agnus”(羔羊)的子串的个数。注意:当且仅当两个子串的起始位置或终止位置不同时,这两个子串属于不同的子串。
【输入】
只有一个字符串,表示题中所述的字符串。
【输出】
仅一个数字,表示满足题意的子串个数。
【输入输出样例】
agnus.in
agnusbgnus
agnus.out
6
【样例解释】
6 个子串分别是: agnus、 agnusb、 agnusbg、 agnusbgn、 agnusbgnu、 agnusbgnus
【数据规模和约定】
对于 40%的数据,字符串长度<=1000
对于 100%的数据,字符串长度<=30000
【题解】
这明明是千年难遇的大水题啊。。。
然而在考试时,我先用KMP找出angus的位置,再不断纠结于如何处理包含多个angus的字符串的重复计数情况,最后为了保险把接近正解(是错解)的程序改成暴力。
其实哪用得着这么高级的东西,找出angus位置O(n)搜一遍就好了(如果不是搜几个单词不要用KMP)。计数时只保留包含后面angus的情况,不计入包含前面angus的情况。。。
我好蒟啊。。。
#include<iostream>#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<vector>#define ll long long#define re register#define il inline#define fp(i,a,b) for(re int i=a;i<=b;i++)#define fq(i,a,b) for(re int i=a;i>=b;i--)using namespace std;const int MAX=30005;char s[MAX];int n,last,pos[MAX],tot;//pos[i]记录单词第i次出现的位置ll ans;il int gi(){ re int x=0; re short int t=1; re char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if(ch=='-') t=-1,ch=getchar(); while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x*t;}bool check(int i){ if(s[i]=='a'&&s[i+1]=='g'&&s[i+2]=='n'&&s[i+3]=='u'&&s[i+4]=='s') return true; else return false;}int main(){ freopen("agnus.in","r",stdin); freopen("agnus.out","w",stdout); scanf("%s",s); n=strlen(s); fp(i,0,n-5) if(check(i)) pos[++tot]=i; fp(i,1,tot) ans+=1ll*(pos[i]-last+1)*(n-pos[i]-4),last=pos[i]+1; printf("%lld",ans); fclose(stdin); fclose(stdout); return 0;}
阅读全文
0 0
- 寻找羔羊
- 寻找羔羊(agnus)
- 2017.1.15【初中部 NOIP提高组】模拟赛B组 寻找羔羊(agnus) 题解
- 迷途羔羊
- 《沉默的羔羊》
- 沉默的羔羊
- 迷途的羔羊
- 沉默的羔羊。。。。
- IBM-迷途的羔羊
- 无情六月+迷途羔羊
- 羔羊和白玫瑰
- 浮云与羔羊
- 沉默的羔羊
- 沉默的羔羊
- 沉睡的羔羊准备苏醒!
- 办公室战争----沉默的羔羊
- 迷失自我的小羔羊~~~
- 寻找
- mysql 5.1和5.5的区别
- 包含缓冲和弹性运动的原生JS封装以及例子
- 2017ccpc网络赛——CaoHaha's staff
- 《What can I hold you with?我要用什么留住你》(博尔赫斯)
- 2017.8.19考试
- 寻找羔羊
- Vue.js vs React
- Caffe下多GPU性能问题
- 机器人走方格
- 天天学算法——搜索热词关联(TopK)
- hadoop的使用场合与不使用场合
- new构造函数和原型链
- Linux 端口号占用 并kill 端口号占用进程
- 设计模式之建造者模式