求助第四题,孩子真的想不通
为什么拖到最后不可以,等到不行了可以一次回满啊,和前面掉一点回一点有什么区别吗
感谢感谢
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" ;
	}
}
基恩士成长空间 421人发布

