P8091 [USACO22JAN] Non-Transitive Dice B 题解

直接模拟就好了(暴力出奇迹)。

因为不知道是 \(A\) 击败 \(B\) 还是 \(B\) 击败 \(A\),所以只要判断 chck 函数的结果是否相等(相等即为「非传递的」)就行了。

然后注意要先排序。

#include<bits/stdc++.h>
using namespace std;
int T, a[5], b[5], c[5];
bool flag = false;
int chck(int m[], int n[]) {
	int s1 = 0, s2 = 0;
	for(int i = 1; i <= 4; i++) 
	    for(int j = 1; j <= 4; j++)
	        if(m[i] > n[j]) s1++;
	        else if(m[i] < n[j]) s2++;
	if(s1 == s2) return -1;
	else return s1 > s2 ? 1 : 0;
}
int main() {
	scanf("%d", &T);
	while(T--) {
		flag = false; 
		for(int i = 1; i <= 4; i++) cin >> a[i];
		for(int i = 1; i <= 4; i++) cin >> b[i];
		sort(a + 1, a + 5);
		sort(b + 1, b + 5);
		for(c[1] = 1; c[1] <= 10; c[1]++) 
		for(c[2] = 1; c[2] <= 10; c[2]++)
		for(c[3] = 1; c[3] <= 10; c[3]++) 
		for(c[4] = 1; c[4] <= 10; c[4]++){
			int aa = chck(a, b), bb = chck(c, a), cc = chck(b, c);
			if(aa == bb && bb == cc && aa != -1 && bb != -1 && cc != -1) {
				flag = true;
				break;
			}
		}
		if(flag) printf("yes\n");
		else printf("no\n");
	}
	return 0;
}

posted @ 2022-02-04 14:05  sunskydp  阅读(163)  评论(0编辑  收藏  举报