求助第四题,孩子真的想不通
为什么拖到最后不可以,等到不行了可以一次回满啊,和前面掉一点回一点有什么区别吗
感谢感谢
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
b[i] = b[i - 1] + a[i]; // 前缀和
if (a[i] == 0)
v[++cnt] = i; // 统计回血的地方
}
if (m > b[n]) {
cout << n - 1;
} else {
k = m;
for (int i = 2 ; i <= cnt && m > 0; i++) {
if (b[v[i]] - b[v[i - 1]] >= m) { // 下一阶段要扣的血
res += k - m;
m = k;
}
m -= (b[v[i]] - b[v[i - 1]]);
}
if (m > 0)
cout << res + n - 1;
else cout << "NO" ;
}
}

联想公司福利 1548人发布