【入门OJ】2003: [Noip模拟题]寻找羔羊
这里可以复制样例:
样例输入:
agnusbgnus
样例输出:
6
这里是链接:【入门OJ】2003: [Noip模拟题]寻找羔羊
这里是题解:
题目是求子串个数,且要求简单去重。
对于一个例子(agnus这个单词只出现过一次):abcagnusbgnus
它的满足子串就有以下几种情况:
①自身:agnus;
②和前面的字符组合:abcagnus、bcagnus、cagnus;
③和后面的字符组合:agnusbgnus、agnusbgnu、agnusbgn、agnusbg、agnusb;
④两边都组合:abcagnusbgnus、abcagnusbgnu、abcagnusbgn、abcagnusbg、abcagnusb、bcagnusbgnus、bcagnusbgnu、
bcagnusbgn、bcagnusbg、bcagnusb、cagnusbgnus、cagnusbgnu、cagnusbgn、cagnusbg、cagnusb;
所以首先对于只出现过一次的来说:ans+=(前面字符个数+后面字符个数+前面字符个数*后面字符个数+1);
简化一下就是:ans+=(前面字符个数+1)*(后面字符个数+1);
然而这只是对于只出现过一次的情况。因为要有去重操作,所以并不能直接用于多次出现情况。
首先看重复出现的情况:如果将样例*2:agnusbgnusagnusbgnus
按照以上操作的话:算第一个羔羊会出现:agnusbgnusagnusb(和后面的字符组合)
算第二个羔羊的时候也会出现同样子串:(两边都组合)
所以能看出,对于每个羔羊,利用只出现一次的情况来解决是有区间限制的。而这个区间就是向前不能延伸到
之前出现的羔羊,向后无限延伸。(反之,也成立)
具体的区间就是:
①前区间:上一个agnus的a位置到当前agnus的a位置前一个的位置。
②后区间:当前agnus的s位置后一个的位置到最后一个位置。
(因为求ans是前后都要加1的,所以前区间直接是agnus的a位置,后区间直接是agnus的s位置)
这里是AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define MAXN 30010
using namespace std;
char str[MAXN];
char goal[]="agnus";
int l[MAXN],r[MAXN]; //记录区间
int len,ans;
int cont; int main(){
cin>>str+;
len=strlen(str+);
for(int i=;i<=len;i++){
int cnt=;bool flag=;
while(str[i]==goal[cnt]){
i++;cnt++;flag=;
if(cnt==){
cont++;
i--;flag=;
l[cont]=i-;
r[cont]=i;
break;
}
}
if(flag==) i--;//因为while循环里面i多加了一次,所以减回来。
}
for(int i=;i<=cont;i++){
ans+=(l[i]-l[i-])*(len-r[i]+);
}
printf("%d\n",ans);
return ;
}
【入门OJ】2003
梦想总是要有的,万一实现了呢?
【入门OJ】2003: [Noip模拟题]寻找羔羊的更多相关文章
- NOIP模拟题汇总(加厚版)
\(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...
- 9.9 NOIP模拟题
9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...
- 8.22 NOIP 模拟题
8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...
- NOIP模拟题17.9.26
B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...
- noip模拟题题解集
最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...
- 一些noip模拟题一句话题解
Problem A: 序列 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 12 Solved: 9[Submit][Status][Web Boar ...
- NOIP 模拟题
目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...
- 9.22 NOIP模拟题
吉林省信息学奥赛 2017 冬令营 ...
- 6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)
Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...
随机推荐
- jquery中国地图插件
插件下载地址: http://www.17sucai.com/preview/1266961/2018-09-18/map/js/jsMap-1.1.0.min.js jsMap 项目介绍 这是一个功 ...
- python程序设计——面向对象程序设计:继承
继承是为代码复用和设计复用而设计的 在继承关系中,已有的.设计好的类称为父类或基类,新设计的类为子类或派生类 派生类可以继承父类的公有成员,但不能继承其私有成员 如果需要在派生类中调用基类的方法,可以 ...
- Centos6升级至openssh-7.5p1
最近公司有几台服务器需要搬至甲方(政府单位),所以在安装服务时用的是16年的openssh7.3pl, 今天通知我们有漏洞,需要再一次升级,看到官方文档上版本已升级至7.5,所以干脆直接搞7.5 具体 ...
- oracle查询数据库所有用户信息
看到网上说的查询用户的语句: SELECT * FROM dba_users;这句好像只能系统管理员才能成功执行,普通用户无法执行 SELECT count(*) FROM all_users; , ...
- Kafka安装之三 spring-kafka实践
一.spring-kafka配置详解 1.1 要是用spring-kafka 我们首先要在pom要.xml中引入spring-kafka包 <dependencies> <depen ...
- 回归Qt——写在Qt5.10发布之日
今天偶然看到一条关于Qt5.10发布的消息,发现Qt经历了诺基亚风波之后发展得依然良好,感到很欣慰.回头看上次关注Qt技术还是2011年,那时候用Qt4.7做一个小项目,对于一个写Win32界面和MF ...
- 日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09
作者:倪亚敏 来源:日本新华侨报 发布时间:2017/07/18 11:25:09 据日本政府提供的数据,日本2018年应届毕业生的“求人倍率”已经达到了1.78倍.换言之,就是100名大学生 ...
- 2.openldap安装
1.安装步骤如下 获取软件包 安装软件包(rpm或者源码编译) 生产openldap配置文件及数据库文件 配置 添加目录树条目 加载slapd进程 验证 2.所需安装包说明 openldap,open ...
- Phonegap 环境配置
目前要开发 Web App 还是有比较多的选择的 如 Phonegap.MUI.AppCan,接下来以 Web前端开发工程师 的角度来一个 Phonegap 的 First Blood 一.开发环境: ...
- Arctic Network POJ 2349 (最小生成树思想)
Description The Department of National Defence (DND) wishes to connect several northern outposts by ...