cf1553C. Penalty

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf1553C. Penalty相关的知识,希望对你有一定的参考价值。

cf1553C. Penalty

题意:

有十轮点球,两个队伍轮流进行,1表示进,0表示不进,?表示未知,如果比赛没有了悬念将直接结束。现在让你预测一个情况,使得进行的轮数最少。裁判在决定停止点球阶段时没有考虑任何预测-你可能知道一些点球将会/不会得分,但裁判没有。

题解:

当时我第一反应,最佳情况就是一方的?全是进球,另一方?全没进球,为什么这样,因为要求比赛尽快结束,为了让比赛没有悬念,我们就要尽可能拉大比分,已有的0和1已经确定了进球情况,而?还是未知,所以我们将两侧?取相反,这样就保证极端情况

代码:

#include <bits/stdc++.h>

using namespace std;

int main() {
	int t;
	cin >> t;
	while (t--) {
		string s;
		cin >> s;
		int ans = 9;
		
		int cnt0 = 0, cnt1 = 0;
		for (int i = 0; i < 10; ++i) {
			if (i % 2 == 0) cnt0 += s[i] != '0';
			else cnt1 += s[i] == '1'; 
			/*
			(10 - i) / 2表示如果第二个队后面的点球全进
			(9 - i ) / 2表示如果第一个队后面的点球全进 
			*/
			if (cnt0 > cnt1 + (10 - i) / 2) ans = min(ans, i);
			if (cnt1 > cnt0 + (9 - i) / 2) ans = min(ans, i);
		}

		cnt0 = 0, cnt1 = 0;
		for (int i = 0; i < 10; ++i) {
			if (i % 2 == 0) cnt0 += s[i] == '1';
			else cnt1 += s[i] != '0'; 
			if (cnt0 > cnt1 + (10 - i) / 2) ans = min(ans, i);
			if (cnt1 > cnt0 + (9 - i) / 2) ans = min(ans, i);
		}
		
		cout << ans + 1 << endl;
	}
}

以上是关于cf1553C. Penalty的主要内容,如果未能解决你的问题,请参考以下文章

CF&&CC百套计划2 CodeChef December Challenge 2017 Penalty Shoot-out

cf1553F. Pairwise Modulo

cf1553E. Permutation Shift

Educational Codeforces Round 58 (Rated for Div. 2)(待更新)

sklearn中的SGDClassifier

如何从后台弹出片段