Codefoces Gym 101652 【最大连续和】
<题目链接>
题目大意:
给你一段只由 'B'和'R'组成的字符串,问你在连续的区间内,"B"和"R"的差值最大是多少,输出该区间;如果对于差值相等的区间,优先输出左端点小的,左端点相同,优先输出右端点小的。
解题分析:
很明显要分两种情况讨论,一种是该区间内B比R多,第二种是该区间内R比B多。仔细思考后发现,可以将此题转化为最大连续和问题,对于B多的情况,用dp1来维护,将B看成1,R看成-1,对于R多的情况则用dp2来维护,将R看成1,B看成-1,然后就是用dp求解最大连续和即可,同时记录一下最大连续和所在的区间。
#include <bits/stdc++.h>
const int M = 1e5 + ;
#define INF 0x3f3f3f3f int main() {
char str[M];
scanf("%s", str + );
int len = strlen(str + );
int dpB[M], dpR[M];
for (int i = ; i <= len; i++) {
if (str[i] == 'B')
dpB[i] = ;
else
dpB[i] = -;
if (str[i] == 'R')
dpR[i] = ;
else
dpR[i] = -;
}
int s1, e1, s2, e2; //分别记录两种情况的最优区间
dpB[] = -, dpR[] = -;
int start1, start2, end1, end2;
int mx1 = -INF;
for (int i = ; i <= len; i++) { //先讨论B比R多的情况,求出B比R多的最大连续和
if (dpB[i - ] >= )
dpB[i] = dpB[i - ] + dpB[i];
else
s1 = i;
if (mx1 < dpB[i]) {
mx1 = dpB[i];
start1 = s1;
end1 = i;
}
}
int mx2 = -INF;
for (int i = ; i <= len; i++) { //讨论R比B多的情况,求出R比B多的最大连续和
if (dpR[i - ] >= )
dpR[i] = dpR[i - ] + dpR[i];
else
s2 = i;
if (mx2 < dpR[i]) {
mx2 = dpR[i];
start2 = s2;
end2 = i;
}
}
//然后就是比较两种情况的最大连续和,并且当最大连续和相同时,按题目要求格式输出
if (mx1 > mx2) {
printf("%d %d\n", start1, end1);
} else if (mx1 == mx2) {
if (start1 < start2)
printf("%d %d\n", start1, end1);
else if (start1 == start2) {
printf("%d ", start1);
end1 < end2 ? printf("%d\n", end1) : printf("%d\n", end2);
} else {
printf("%d %d\n", start2, end2);
}
} else {
printf("%d %d\n", start2, end2);
}
return ;
}
2018-09-17
Codefoces Gym 101652 【最大连续和】的更多相关文章
- 强化学习--DDPG---tensorflow实现
完整代码:https://github.com/zle1992/Reinforcement_Learning_Game 论文<Continuous control with deep reinf ...
- 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)
项目地址:https://github.com/bharathgs/Awesome-pytorch-list 列表结构: NLP 与语音处理 计算机视觉 概率/生成库 其他库 教程与示例 论文实现 P ...
- Codeforces Gym 100513G G. FacePalm Accounting 暴力
G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...
- Codeforces Gym 100513F F. Ilya Muromets 线段树
F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...
- Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞
Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...
- Codeforces Gym 100342E Problem E. Minima 暴力
Problem E. MinimaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attac ...
- 【 Gym - 101138K 】 The World of Trains (DP)
BUPT2017 wintertraining(15) #4E Gym - 101138K 题意 N节车厢的火车,每节车厢容量是1~K,那么有\(K^N\)种火车. 求选择D个连续的且容量相同的车厢的 ...
- Gym 101617J Treasure Map(bfs暴力)
http://codeforces.com/gym/101617/attachments 题意:给出一个图,每个顶点代表一个金矿,每个金矿有g和d两个值,g代表金矿初始的金子量,d是该金矿每天的金子量 ...
- Gym 100712I Bahosain and Digits(开关翻转问题)
http://codeforces.com/gym/100712/attachments 题意: 给出一串数字,每次选择连续的k个数字加上任意数(超过10就取余),最后要使得所有数字都相等,求最大的k ...
随机推荐
- winform无需安装pdf阅读器打开pdf文件
控件来源:http://www.o2sol.com/pdfview4net/download.htm (使用版本:2016年8月31号更新版) 备份链接: https://pan.baidu.com/ ...
- 【DOS】文件统计命令
1. 统计当前文件夹下文件的个数 ls -l|grep "^-"|wc -l 2. 统计当前文件夹下目录的个数 ls -l|grep "^d"|wc -l 3. ...
- mysql视图的作用
测试表:user有id,name,age,sex字段 测试表:goods有id,name,price字段 测试表:ug有id,userid,goodsid字段 视图的作用实在是太强大了,以下是我体验过 ...
- Rational Rose 2007下载、安装和破解
一.文件下载 (1)DAEMON Tools Lite(虚拟光驱)下载地址 链接:https://pan.baidu.com/s/19L1FT6T1MlyhkfXyobd26A 提取码:drfs (2 ...
- x学生管理系统(用中间件)-------基于FORM组件
目的:实现学生,老师,课程的增删改查 models.py from django.db import models # Create your models here. class UserInfo( ...
- 高并发编程基础Synchronized与Volatile
关键字Synchronized: 当使用Synchrnized (o) ,锁定 o 的时候,锁定的是 o 指向的堆内存中 new 出来的对象,而非 o 引用,当锁定 o 以后,一旦 o 指向了其他对象 ...
- Python实现switch效果
Java中有switch这个东东有的地方使用switch感觉还挺好使,但是Python没有提供switch这个东东,下面我们想办法来完成类似Java和C里面的那种switch效果. Java示例代码: ...
- AI学习吧-登录注册
登录注册注销 如果需要给表设置权限,没有登录就不可以查看,只需要在每个视图函数之前加上Auth_classes=[ ]即可! 增加两张表,做登录认证 #models.py #做登录验证 class U ...
- 如何让谷歌浏览器支持跨域访问(AJAX) AJAX调试跨域接口
以谷歌最新版本为例(2018) 1.在电脑上新建一个目录,例如:C:\MyChromeDevUserData 2.在属性页面中的目标输入框里加上 --disable-web-security -- ...
- 20165206第4次实验《Android程序设计》实验报告
20165206第4次实验<Android程序设计>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:韩啸 学号:20165206 指导教师:娄嘉鹏 实验日期:2 ...