题目大意:给定一个长度为 N 的序列,现有两个人从 P 点出发,每个单位时间每个人最多可以移动一个单位,两人之间的最大距离不能超过 M,一共有 T 单位的时间,求在合法情况下,两人可以获得的序列点权和最大是多少。

题解:模拟+贪心

首先考虑最开始的情况,在合法的情况下肯定是扩展的越大越好,在这里用了一个贪心。需要注意的是,若 M 为奇数,则要讨论最后一步谁来走。再根据剩余的时间进行枚举多少步向左走,多少步向右走,统计答案即可。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
typedef long long LL; int n,m,t,p;
LL sum[maxn],ans; void read_and_parse(){
for(int i=1;i<=n;i++){
scanf("%lld",&sum[i]);
sum[i]+=sum[i-1];
}
scanf("%d%d",&m,&t);
ans=0;
}
void getans(int l,int r,int rest){
LL ret=0;
for(int k=0;k<=rest;k++){ // left
if(l-k<1)break;
int lb=l-k,rb=min(n,max(r+rest-2*k,r));
ret=max(ret,sum[rb]-sum[lb-1]);
}
for(int k=0;k<=rest;k++){ // right
if(r+k>n)break;
int rb=r+k,lb=max(1,min(l,l+2*k-rest));
ret=max(ret,sum[rb]-sum[lb-1]);
}
ans=max(ans,ret);
}
void solve(){
int lb=max(1,p-t),rb=min(n,p+t);
if(rb-lb<=m){
printf("%lld\n",sum[rb]-sum[lb-1]);
return;
}
if(m&1){
int l=max(1,p-m/2),r=min(n,p+m/2);
int rest=t-m/2-1;
getans(l,r+1,rest),getans(l-1,r,rest);
}else{
int l=max(1,p-m/2),r=min(n,p+m/2);
int rest=t-m/2;
getans(l,r,rest);
}
printf("%lld\n",ans);
}
int main(){
while(scanf("%d%d",&n,&p)!=EOF){
read_and_parse();
solve();
}
return 0;
}

最新文章

  1. neutron的基本原理
  2. Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析
  3. system 函数
  4. 使用Myeclipse创建自定义签名debug keystore
  5. 文件与目录的默认权限与隐藏权限【转vbird】
  6. 百度地图 web定位
  7. Golang在视频直播平台的高性能实践
  8. 【转】ORACLE日期时间 等函数大全
  9. oracle还原数据库及遇到的问题
  10. 在字符编码格式选项里UTF-8(无BOM)的意思
  11. 武汉科技大学ACM :1006: 华科版C语言程序设计教程(第二版)习题7.15
  12. SQL SERVER中如何格式化日期
  13. js中checkbox的全选和反选的实现
  14. WPF自学入门(十)WPF MVVM简单介绍
  15. LeetCode Javascript实现 283. Move Zeroes 349. Intersection of Two Arrays 237. Delete Node in a Linked List
  16. Node.js模块导入导出
  17. C# 读写本地配置文件
  18. Using IntelliJ IDEA as the Vim Editor
  19. 利用SSH上传、下载(使用sz与rz命令)
  20. 记一次线上bug排查-quartz线程调度相关

热门文章

  1. 【PI系列】SAP IDOC发送状态03,PI没有收到消息的解决办法
  2. C++中内联函数的用法
  3. JAVA 编程思想一
  4. lua基础学习(三)
  5. 深入理解java:4.2. 框架编程之Spring框架的设计理念
  6. for循环实现九九乘法表
  7. pom文件中引入依赖成功了,但是jar包找不着
  8. PTA(Basic Level)1010.一元多项式求导
  9. CMD 显示当前时间和日期
  10. 小记---------Hadoop的MapReduce基础知识