为什么拖到最后不可以,等到不行了可以一次回满啊,和前面掉一点回一点有什么区别吗
感谢感谢
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" ; } }
全部评论
(1) 回帖