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

前提是你 提交于 2020-02-22 07:00:41

解题报告:

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

模拟过程:

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!