题目链接:

https://nanti.jisuanke.com/t/36116

题目:

在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币。但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币。因为这些数字都是可见的,所以大家都是不会出现的赔的情况。

游戏规则:每人只能抓一次,只能抓取一段连续的纸团,所有纸团上的数字和就是你可以获得的蒜币。

蒜头君作为蒜厂的一员在想,我怎么可以获得最多的蒜币呢?最多能获取多少蒜币呢?

因为年会是发奖,那么一定有大于 00 的纸团。

输入格式

第一行输入一个整数 nn,表示有 nn 个纸团。

第二行输入输入 nn 个整数 a_iai​,表示每个纸团上面写的数字(这些纸团的输入顺序就是环形桌上纸团的摆放顺序)。

输出格式

输出一个整数,表示蒜头君最多能获取多少蒜币。

数据范围

对于 30\%30% 的数据:1 \le n \le 10^2,-10^3 \le a_i \le 10^31≤n≤102,−103≤ai​≤103。

对于 60\%60% 的数据:1 \le n \le 5 \times 10^3,-10^6 \le a_i \le 10^61≤n≤5×103,−106≤ai​≤106。

对于 100\%100% 的数据:1 \le n \le 10^5,-10^9 \le a_i \le 10^91≤n≤105,−109≤ai​≤109。

样例输入

3

1 -2 1

样例输出

2

题目来源

2019 蓝桥杯省赛 B 组模拟赛(一)

分析: 求循环的连续最大和.

循环好解决:   把数组首尾连成2n长的.

然后就是求长度不超过n的最大连续和.

一般求连续和 直接用前缀和,然后逐步做差即可.

但是这儿有个限制,要求长度不超过n. 所以我们可以用优先队列:

维护一个结构体

struct node {

  ll val;

int index;

};

根据index判断一下长度是否超过n即可.

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+50;ll arr[maxn * 2];struct node {ll val;int index;bool operator < (const node &a) const {if (val != a.val) return val > a.val;return index > a.index;}node () {}node (ll vv, int ii) : val(vv), index(ii) {}
};int main() {ios::sync_with_stdio(false);int n;cin >> n;for (int i=0; i<n; ++i)cin >> arr[i];for (int i=n; i<2*n; ++i)arr[i] = arr[i-n];for (int i=1; i<2*n; ++i)arr[i] = arr[i] + arr[i-1];ll res = -8626213631111ll;ll tans;priority_queue<node> pq;for (int i=0; i<2 * n; ++i) {if (pq.empty()) tans = arr[i];if (tans > res) res = tans;while (!pq.empty()) {node tmp = pq.top();if (i - tmp.index >= n) {pq.pop();continue;} else {tans = arr[i] - tmp.val;break;}}if (tans > res) res = tans;pq.push({arr[i], i});}cout << res << endl;return 0;
}

转载于:https://www.cnblogs.com/cgjh/p/10343581.html

长度不超过n的连续最大和___优先队列相关推荐

  1. 7-33 删除句子中的单词 (8 分)输入n(n<=10)个由若干个单词组成的英文句子(句子的长度不超过100),每个句子以英文的标点“.”结束,每个句子中单词之间由1个空格进行分隔,如果最后一个单

    7-33 删除句子中的单词 (8 分) 输入n(n<=10)个由若干个单词组成的英文句子(句子的长度不超过100),每个句子以英文的标点"."结束,每个句子中单词之间由1个空 ...

  2. java 输入一串字符串 字符串长度不超过100

    题目 /*** 输入一串字符串* 字符串长度不超过100* 查找字符串中相同字符连续出现的最大次数* <p>* 输入描述* 输入只有一行,包含一个长度不超过100的字符串* <p&g ...

  3. 输入一个QQ邮箱或者网易邮箱,判断其格式是否正确 要求:长度不能超过15,@前面不能用字母 正确格式2156636@qq.com

    package com.coding.syudy05; /*** 输入一个QQ邮箱或者网易邮箱,判断其格式是否正确* 要求:长度不能超过15,@前面不能用字母* 正确格式2156636@qq.com* ...

  4. 输入一个长度不超过100的字符串,删除串中的重复字符。

    #include <stdio.h> #include <string.h> #define N 200 int main() { char a[N]; //存储字符串. in ...

  5. 回文判断 【问题描述】 回文是正读和倒读都一样的句子。读入一个最大长度不超过50个字符的句子,判断其是否是回文。 【输入形式】 输入一个最大长度不超过50个字符的句子 【输出形式】 Yes/No

    回文判断 [问题描述] 回文是正读和倒读都一样的句子.读入一个最大长度不超过50个字符的句子,判断其是否是回文. [输入形式] 输入一个最大长度不超过50个字符的句子 [输出形式] Yes/No [输 ...

  6. 有苦有乐的算法 --- 一个无序数组,如果从小到大排好序,任何一个元素任何一个元素移动索引长度不超过k,实现排序

    题目 一个无序数组,如果从小到大排好序,任何一个元素任何一个元素移动索引长度不超过k,实现从小到大排序 例: k=2 排序后,[4]移动2个索引,[6]移动2个索引,[1]移动2个索引,[3]移动2个 ...

  7. C语言将一字符串输入到数组(长度不超过80)后将其输出, 将其中的英文字母大小写互换后再将整个字符串输出。

    题目 将一字符串输入到数组(长度不超过80)后将其输出, 将其中的英文字母大小写互换后再将整个字符串输出. 代码 # include <stdio.h> # include <str ...

  8. 20210103输入N个字符串,求出最大字符串,每个字符串长度不超过10.

    Description 输入N个字符串,求出最大字符串,每个字符串长度不超过10. Input 整数数n  n个字符串 Output 最长字符串 Sample Input 3 abc bedse78 ...

  9. 重复子字符串(给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。)

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000.   示例 1: 输入: "abab" 输出: True ...

最新文章

  1. 只有ajax会跨域吗_ajax处理跨域有几种方式
  2. JSON:如果你愿意一层一层剥开我的心,你会发现...这里水很深——深入理解JSON...
  3. apache工作原理
  4. 快速生成NHibernate的映射文件和映射类的利器 —— codesmith软件
  5. postman-常见问题解决方案记录
  6. 【共享内存】基于共享内存的无锁消息队列设计
  7. 滴滴滴,测试工程师简历模板分享一波
  8. JTable 的使用
  9. 实测Untangle - Linux下的安全网关
  10. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;...
  11. Ubuntu下安装Chrome浏览器的方法
  12. DevExpress WPF控件3D打印应用场景 - 实现3D打印系统可视化窗口
  13. 蒙特卡罗仿真(1):入门求生指南(Python实例)
  14. 某易易盾滑块流程加参数分析
  15. 简述java工厂模式详解_JAVA 设计模式之 工厂模式详解
  16. 001 量子计算与复数
  17. HP暗影精灵7笔记本OMEN16.1inch Gaming Laptop PC16-b0000原装出厂Win11系统恢复原厂OEM系统
  18. 学 android需要什么基础,学习安卓开发需要什么基础?
  19. 上海/深圳/香港内推 | 商汤科技EIG研究中心招聘AI算法研究员/实习生
  20. 英国化学实验室的管理模式

热门文章

  1. Binary String Minimizing CodeForces - 1256D(贪心)
  2. java配置文件放置到jar外_java相关:Spring Boot 把配置文件和日志文件放到jar外部...
  3. 13计算机组装,计算机组装与维修—教案13 .pdf
  4. jdk1.8_googleV3免费下载(API中文文档)
  5. Java通过HighCharts导出图表
  6. 64位ubuntu 12.04系统编译busybox遇到的问题处理办法
  7. AI有道干货 --- 126 篇 AI 原创文章精选(ML、DL、资源、教程)
  8. python二叉树的创建与遍历
  9. C++中cin、cin.get()、cin.getline()、getline()、gets()、getchar()、scanf()等函数的用法
  10. SQL经典问题1——产品、颜色、数量