AcWing 3769. 移动石子——发挥你的想象力!
原题链接
简单
作者:
落阳
,
2021-07-16 19:17:59
,
所有人可见
,
阅读 328
其实就是一道思维题
- 第0个位置的石子直接计入答案不用管
- 第i个位置的石子每个移动到第一个位置需要移动i次
- 每次移动都将d减去相应的次数,直到减到某个地方,再减就小于0了,就终止
#include<bits/stdc++.h>
using namespace std;
int arr[110];
int main() {
int T;
int n, d;
int res = 0;
scanf("%d", &T);
while (T--) {
cin >> n >> d;
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
res = arr[0];
for (int i = 1; i < n; i++) {
// 如果可以全部放进去
if (d - arr[i] * i >= 0) {
res += arr[i];
d -= arr[i] * i;
}
// 如果只能放入一部分
else {
res += d / i;
break;
}
}
printf("%d\n", res);
}
return 0;
}