博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数学考试(牛客)
阅读量:3969 次
发布时间:2019-05-24

本文共 682 字,大约阅读时间需要 2 分钟。

题意:一套试卷有n道题,第i道题能获得的分数为a[i],选两个不连续的长度为k的区间(即[L,L+1,L+2,…,L+k-1],[R,R+1,R+2,…,R+k-1](R >= L+k)),使最终获得的分数最大。
题解:求前缀和来通过端点求这个区间内的和。又因为两个区间不能相交,维护i之前的连续k个数和的最大值maxx1,找到i之后连续k个数的和与maxx1相加使得maxx2最大
代码:

#include
using namespace std;typedef long long ll;ll sum[2000010],a[2000010];int main(){
int t,n,k,flag; ll maxx1,maxx2,temp; cin>>t; while(t--){
cin>>n>>k; maxx1=-1e18,maxx2=-1e18; memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++){
cin>>a[i]; sum[i]=sum[i-1]+a[i]; } maxx1=sum[k]-sum[0]; maxx2=sum[2*k]-sum[0]; for(int i=k;i<=n-k;i++){
maxx1=max(maxx1,sum[i]-sum[i-k]); maxx2=max(maxx2,maxx1+sum[i+k]-sum[i]); } cout<
<

涉及知识点:前缀和

转载地址:http://ipnki.baihongyu.com/

你可能感兴趣的文章
Java:重写equals()和hashCode()
查看>>
windows 7环境下配置oracle 11g 客户端
查看>>
ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
查看>>
Linux如何查询内存真实利用率
查看>>
Groovy 集合
查看>>
帮助软件开发者提高效率的10个小窍门
查看>>
如何进行有效的代码检查
查看>>
ORA-01502:索引或这类索引的分区处于不可用状态
查看>>
oracle 一次诊断和解决CPU利用率高的问题分析
查看>>
解决MyEclipse吃内存,让MyEclipse飞起来,MyEclipse速度
查看>>
Available Memory is low
查看>>
读v_JULY_v整理笔试题博客有感,整理些答案。
查看>>
第一范式,第二范式,第三范式
查看>>
JS及java验证 IPV6,IPV4地址的 正则表达式
查看>>
fastjson深度源码解析- 序列化(一) - 序列化基础类型解析
查看>>
自己动手编译JDK
查看>>
fastjson深度源码解析- 序列化(二) - 序列化字节和字符串解析
查看>>
fastjson深度源码解析- 序列化(三) - 序列化字段属性键值对
查看>>
fastjson深度源码解析- 序列化(四) - json序列化实现解析
查看>>
fastjson深度源码解析- 序列化(五) - json内部注册序列化解析
查看>>