Codeforces Round #621 (Div. 1 + Div. 2) Cow and Haybales

解题报告:

思路:越靠近第一个数的位置移动到第一个数代价最小。

模拟过程:

4 5
1 0 3 2

从下标为1的开始移,发现为0,无法移动。

从下标为2的开始移,有3个,但每次移动需要2,只能移动2个。变为3 0 1 2

无法移动了。答案就是3

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 100+10;
ll num[N];
void solve(){
    ll n, d;
    scanf("%lld%lld", &n, &d);
    for(ll i=0; i<n; ++i){
        scanf("%lld", num+i);
    }
    for(ll i=1; i<n; ++i){
        num[0] += min(i*num[i], d)/i;
        d -= i*num[i];
        if(d <= 0)break;
    }
    printf("%lld\n", num[0]);
}
int main(){
    ll t;
    scanf("%lld", &t);
    while(t--){
        solve();
    }
    return 0;
}
发布了206 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/jun_____/article/details/104423625
今日推荐