前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >P5638 【CSGRound2】光骓者的荣耀 (前缀和)

P5638 【CSGRound2】光骓者的荣耀 (前缀和)

作者头像
dejavu1zz
发布2020-10-23 15:16:23
4510
发布2020-10-23 15:16:23
举报
文章被收录于专栏:奇妙的算法世界

题意描述

题目描述 小 K 打下的江山一共有n个城市,城市i和城市i+1之间有一条双向高速公路连接,走这条路要耗费时间ai。 小 K 为了关心人民生活,决定定期进行走访。他每一次会从1号城市到n号城市并在经过的城市进行访问。其中终点必须为城市n。 不仅如此,他还有一个传送器,传送半径为k,也就是可以传送到i−k和i+k。如果目标城市编号小于1则为11,大于n则为n。 但是他的传送器电量不足,只能传送一次,况且由于一些原因,他想尽量快的完成访问,于是就想问交通部部长您最快的时间是多少。 注意:他可以不访问所有的城市,使用传送器不耗费时间 输入格式 两行,第一行n,k。 第二行n−1个整数,第i个表示ai 输出格式 一个整数,表示答案。

输入: 4 0 1 2 3 输出: 6 输入: 4 1 1 2 3 输出: 3

题意描述可能不清楚,具体的图是数据范围见原链接:洛谷

思路

这是洛谷的一道入门题…一道入门题都让我想了20分钟。由于传送器只能使用一次,所以我们要将传送器使用在距离最远的城市。需要注意的是,如果能够传送的城市范围大于城市的数目,那么最快输出0就可以。

AC代码

代码语言:javascript
复制
#include<iostream>
#include<algorithm>
#include<cmath>
#define IOS ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
const int INF=1e9+7;
ll a[maxn],s[maxn];
int n,k;
int main()
{
    IOS;
    cin>>n>>k;
    for(int i=1;i<=n-1;i++){
        cin>>a[i];
        s[i]=s[i-1]+a[i];
    }
    k--;
    if(k<0) cout<<s[n-1]<<endl;
    else if(k>=n-1) cout<<0<<endl;
    else{
        ll ma=-INF;
        for(int i=k+1;i<=n-1;i++){
            ma=max(ma,s[i]-s[i-k-1]);
        }
        cout<<s[n-1]-ma<<endl;
    }
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意描述
  • 思路
  • AC代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档