Boboniu Likes to Color Balls

题意:有4种球:红球,绿球,蓝球和白球,可以进行这样的操作:同时将一个红球,一个绿球,一个蓝球刷成白球,上述操作可以进行多次,问你是否存在一个小球序列使颜色是回文的。

这题是A题,但脑子不太清醒竟然做了半个小时,比赛咕咕咕了,赛前一小时睡到了第二天。

满足题目回文的要求,则有:
①所有颜色的球的数量都是偶数
②至多只有一种颜色的球的数量是奇数

每次进行操作后所有颜色的球的数量的奇偶性都发生了变化,所以我们只需要探讨初始情况和进行一次操作后是否满足上述条件即可。

我一开始虽然是按奇偶性来的,但是没有抓住上面的要求,在那里细分每个球的奇偶性情况233

AC Code

#include
#include
#include

using namespace std;

bool sign1, sign2;

bool solve(int r,int g,int b,int w) {
	int ret = r % 2 + g % 2 + w % 2 + b % 2;
	if ( ret<= 1) sign1 = true;
	if (ret>=3) sign2 = true;
	return false;
}

int main() {
	int t;
	scanf("%d", &t);
	while (t--) {
		int r, g, b, w;
		sign1 = sign2 = false;
		scanf("%d %d %d %d", &r, &g, &b, &w);
		int temp = min(r, min(g, b));
		solve(r, g, b, w);
		if (sign1) {
			printf("Yes\n");
		}
		else if (temp != 0 && sign2) {
			printf("Yes\n");
		}
		else {
			printf("No\n");
		}
	}
}

你可能感兴趣的:(模拟,算法)