P2629 【好消息,坏消息】
其实刚开始看到这道题,应该很多都会想到区间DP中的合并石子,开一个2倍的空间(严格来说的话应该是2n-1),将本来的环变成一个链式的结构。然后对于得到的消息,可以预处理一个前缀和,这样就可以很方便的知道 1~k-1 中是否会有 <0 的情况,那么这样就可以很容易得到第一种做法(这里的前缀和我写的有点麻烦,大佬们谅解一下)
//暴力
#include<bits/stdc++.h>
using namespace std;
int n;
int a[2000005];
int sum[2000005];
bool check(int now){
for(int j=0;j<n;j++){
if(sum[now+j]-sum[now-1]<0) return false;
}
return true;
}
int main(){
scanf("%d",&n);
for(register int i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i+n]=a[i];
sum[i]=sum[i-1]+a[i];
}
int tot=1;
for(register int i=n+1;i<=2*n-1;i++){
sum[i]=sum[i-1]+a[tot];
tot++;
}
int ans=0;
for(register int i=1;i<=n;i++){
if(check(i)==true) ans++;
}
cout<<ans;
return 0;
}
看着感觉不能过,毕竟有点暴力的思想在里面,但是居然得了75分,我然后就想着快读+吸氧看能不能直接过,但事实上还是TLE了两个点,那么我们重新回到样例看一看
当我们将这个环形链化,并且处理前缀和之后,我们可以得到以下的数据
-3 5 1 2 -3 5 1
-3 2 3 5 2 7 8
那么对于每n个长度(即每一种不同的k的情况),我们可以得到分别的前缀和
-3 5 1 2 //不同k的情况
-3 2 3 5 //前缀和
5 1 2 -3
5 6 8 5
1 2 -3 5
1 3 0 5
2 -3 5 1
2 -1 4 5
我们再进一步处理,得到每一组情况的最小前缀和分别为-3 5 0 -1,那么对于这其中大于等于0的情况的总数,就是最后答案的解了。所以这道题的思路,就是用单调队列维护区间的最小前缀和。至于单调队列,大家可以去搜搜滑动窗口,是单调队列的模板题
//单调队列
#include<bits/stdc++.h>
using namespace std;
int n;
int a[2000005];
int sum[2000005];
deque<int> q;
int main() {
scanf("%d",&n);
for(register int i=1; i<=n; i++) {
scanf("%d",&a[i]);
a[i+n]=a[i]; //化环为链,因为方便写,这里实际是存储了2n个数据的
sum[i]=sum[i-1]+a[i]; //处理前n个前缀和
}
int tot=1; //方便记录之后的前缀和
for(register int i=n+1; i<=2*n-1; i++) {
sum[i]=sum[i-1]+a[tot];
tot++; //处理n到2n-1个前缀和
} //这里的前缀和处理可以其实直接写成一个for循环的,但是写的有些麻烦
int ans=0;
for(register int i=1; i<=2*n-1; i++) {
while(!q.empty()&&sum[q.back()]>=sum[i]) q.pop_back(); //维护最小前缀和
q.push_back(i);
if(i>=n) { //一定是长度为n的
while(!q.empty()&&q.front()<=i-n) q.pop_front(); //保证答案是在当前区间范围内
if(sum[q.front()]-sum[i-n]>=0) ans++; //最小前缀和
}
}
printf("%d",ans);
return 0;
}
P2629 【好消息,坏消息】的更多相关文章
- 线段树【p2629】 好消息,坏消息
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p2629 好消息,坏消息 历程 刚开始看到这个题,发现是需要维护区间和,满心欢喜敲了一通线段树,简单debug之后交上去 \ ...
- 单调队列练习题解(切蛋糕&好消息,坏消息)
单调队列的练习题解 前言: 在上一篇学习记录中,单调队列给出了几道练习题,因为这两道题的算法以及思路相差无几(几乎可以算是双倍经验quq),所以就在这里集中写一下相关的题解 前置知识: 见:队列专题( ...
- 洛谷 P2629 好消息,坏消息
题目描述 uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一旦老板 ...
- 【洛谷】【前缀和+st表】P2629 好消息,坏消息
[题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...
- 洛谷【P2629】好消息,坏消息
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.luogu.org/problemnew/show/P2629 ...
- P2629 好消息,坏消息
题目描述 uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一旦老板 ...
- 【P2629】好消息,坏消息(前缀和+单调队列优化DP)
一激动一颓就会忘了总结... 前面的大黄题就不总结了. 这个题我只想说一声艹,一开始的思路就是正确的,然后计算的时候有了一个瑕疵,不过很快也就改过来了.然后却一直连样例都过不了.仔仔细细看了老半天,经 ...
- 洛谷 P2629 好消息,坏消息 题解
暴力算法的时间复杂度是O(n^2),考虑优化: 先导入一种思想--断环为链.说通俗点就是在原数组后面再接上下标为1--(n - 1)的元素: 以样例为例:-3 5 1 2:我们将其断环为链后可以得到这 ...
- 坏消息:百度影音、快播关闭P2P服务器!
继日前优酷土豆集团.搜狐视频.腾讯视频.乐视网.中国电影著作权协会(MPA).美国电影协会 (MPAA).日本内容产品流通海外促进机构(CODA).万达影业.光线传媒.乐视影业联合发布“中国网络视频反 ...
随机推荐
- Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...
- Java实现 蓝桥杯VIP 算法提高 字符串跳步
问题描述 给定一个字符串,你需要从第start位开始每隔step位输出字符串对应位置上的字符. 输入格式 第一行一个只包含小写字母的字符串. 第二行两个非负整数start和step,意义见上. 输出格 ...
- Java实现 蓝桥杯 算法提高 矩形靶
试题 算法提高 矩形靶 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 在矩形的世界里任何事物都是矩形的,矩形的枪靶,甚至矩形的子弹.现在给你一张NM的枪靶,同时告诉你子弹的大小为( ...
- PAT 说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...
- POJ 2810:完美立方
原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 形如\(a^{2}\)= \(b^{2}\) + \(c^{2}\) + \(d^{2}\)的等式被称为完美立方等式.例如123 ...
- tensorflow2.0学习笔记第一章第一节
一.简单的神经网络实现过程 1.1张量的生成 # 创建一个张量 #tf.constant(张量内容,dtpye=数据类型(可选)) import tensorflow as tf import num ...
- iOS -iOS9中提示框(UIAlertController)的常见使用
iOS 8 之前提示框主要使用 UIAlertView和UIActionSheet:iOS 9 将UIAlertView和UIActionSheet合二为一为:UIAlertController . ...
- java实现简单的oss存储
oss 工作中需要用到文件上传,之前使用的是本地文件系统存储方式,后来重构为支持多个存储源的方式,目前支持三种方式:local.seaweedfs.minio 存储介质 seaweedfs seawe ...
- 2.使用nexus3配置docker私有仓库
1,配置走起 1,创建blob存储 登陆之后,先创建一个用于存储镜像的空间. 定义一个name,下边的内容会自动补全. 然后保存. 注意:实际生产中使用,建议服务器存储500G或以上. 2,创建一个h ...
- free【分层图最短路】
free 传送门 来源: 牛客网 题目描述 Your are given an undirect connected graph.Every edge has a cost to pass.You ...