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

题意描述

题目描述
小 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代码

#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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值