竞赛讨论区 > 求助第四题,孩子真的想不通
头像
cly.521
编辑于 01-05 22:00
+ 关注

求助第四题,孩子真的想不通

为什么拖到最后不可以,等到不行了可以一次回满啊,和前面掉一点回一点有什么区别吗

感谢感谢

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) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐