Codeforces Round #476 (Div. 2) [Thanks, Telegram!] D. Single-use Stones(贪心)

D. Single-use Stones
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

A lot of frogs want to cross a river. A river is w
units width, but frogs can only jump l units long, where l < w. Frogs can also jump on lengths shorter than l

. but can’t jump longer. Hopefully, there are some stones in the river to help them.

The stones are located at integer distances from the banks. There are ai
stones at the distance of i

units from the bank the frogs are currently at. Each stone can only be used once by one frog, after that it drowns in the water.

What is the maximum number of frogs that can cross the river, given that then can only jump on the stones?
Input

The first line contains two integers w
and l (1≤l< w≤105

) — the width of the river and the maximum length of a frog’s jump.

The second line contains w−1
integers a1,a2,…,aw−1 (0≤ai≤104), where ai is the number of stones at the distance i

from the bank the frogs are currently at.
Output

Print a single integer — the maximum number of frogs that can cross the river.
Examples
Input
Copy

10 5
0 0 1 0 2 0 0 1 0

Output
Copy

3

Input
Copy

10 3
1 1 1 1 2 1 1 1 1

Output
Copy

3

Note

In the first sample two frogs can use the different stones at the distance 5
, and one frog can use the stones at the distances 3 and then 8

.

In the second sample although there are two stones at the distance 5
, that does not help. The three paths are: 0→3→6→9→10, 0→2→5→8→10, 0→1→4→7→10

.

#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep1(i,b,a) for(int i=b;i>=a;i--)
using namespace std;
const int N=1e5+100;
ll arr[N];
/*
    我们用前缀和数组arr[i]表示石头总数
    由于一个青蛙最远跳l
    所以arr[i]-arr[i-l]的最小值就是在石头最少的路段可以通过的青蛙数
    也就是枚举i并且更新最小值
*/
int main()
{
    int l,w;
    cin>>w>>l;
    rep(i,1,w-1)
    {
        cin>>arr[i];
        arr[i]+=arr[i-1];
    }
    ll mi=inf;
    rep(i,l,w-1)
    {
        mi=min(mi,arr[i]-arr[i-l]);
    }
    cout<<mi<<endl;
    return 0;
}

转载于:https://www.cnblogs.com/ffgcc/p/10546424.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值