0
点赞
收藏
分享

微信扫一扫

非传递骰子(春季每日一题 51)

为了消磨牛棚里的时光,奶牛们喜欢玩简单的骰子游戏。

其中一种游戏使用两个骰子 非传递骰子(春季每日一题 51)_i++非传递骰子(春季每日一题 51)_#include_02 进行。

两个骰子均被投掷,获胜的骰子是显示的数字较大的骰子。

如果两者显示相同的数字,则重新投掷(只要持续打平,骰子可能会被重新投掷多次)。

如果骰子 非传递骰子(春季每日一题 51)_i++ 比骰子 非传递骰子(春季每日一题 51)_#include_02 赢的概率更大,我们称骰子 非传递骰子(春季每日一题 51)_i++ 击败骰子 非传递骰子(春季每日一题 51)_#include_02

考虑以下三个的 非传递骰子(春季每日一题 51)_i++_07 面骰子:

骰子 非传递骰子(春季每日一题 51)_测试用例_08 在各面上有数字 非传递骰子(春季每日一题 51)_测试用例_09非传递骰子(春季每日一题 51)_#include_10

骰子 非传递骰子(春季每日一题 51)_i++_11 在各面上有数字 非传递骰子(春季每日一题 51)_枚举_12非传递骰子(春季每日一题 51)_测试用例_13

骰子 非传递骰子(春季每日一题 51)_i++_14 在各面上有数字 非传递骰子(春季每日一题 51)_i++_15非传递骰子(春季每日一题 51)_#include_16

这些骰子满足一个相当奇妙的性质:非传递骰子(春季每日一题 51)_测试用例_08 击败 非传递骰子(春季每日一题 51)_i++_11非传递骰子(春季每日一题 51)_i++_11 击败 非传递骰子(春季每日一题 51)_i++_14,并且 非传递骰子(春季每日一题 51)_i++_14 也击败 非传递骰子(春季每日一题 51)_测试用例_08

可以看出,三个骰子都不是「最佳的」,因为没有任意一个骰子可以击败其他两个骰子。

在这种情况下,当没有两个骰子打平,也没有一个骰子是最佳的,我们称这三个骰子的集合为「非传递的」。

在非传递的三个骰子的集合中,每个骰子击败一个其他骰子,并输给另一个其他骰子。

给定两个 非传递骰子(春季每日一题 51)_i++_07 面骰子 非传递骰子(春季每日一题 51)_测试用例_08非传递骰子(春季每日一题 51)_i++_11 各面上的数字,请帮助奶牛们求出是否有方法为第三个骰子 非传递骰子(春季每日一题 51)_i++_14 的各面分配数字,使得这个骰子的集合是非传递的。

所有骰子面上的数字必须是 非传递骰子(春季每日一题 51)_#include_27非传递骰子(春季每日一题 51)_测试用例_13 的整数。

输入格式
每个测试用例包含多个独立的子测试用例,必须全部回答正确才能通过整个测试用例。

输入的第一行包含 非传递骰子(春季每日一题 51)_枚举_29,为你需要求解的子测试用例的数量。

以下 非传递骰子(春季每日一题 51)_枚举_29 行,每行描述了一个子测试用例,包含 非传递骰子(春季每日一题 51)_枚举_31 个整数:骰子 非传递骰子(春季每日一题 51)_测试用例_08非传递骰子(春季每日一题 51)_i++_07 面上的整数,以及骰子 非传递骰子(春季每日一题 51)_i++_11非传递骰子(春季每日一题 51)_i++_07 面上的整数。

所有的数均在 非传递骰子(春季每日一题 51)_#include_27非传递骰子(春季每日一题 51)_测试用例_13 之间,不一定排序。

可能同一个数会出现多次,即使在同一个骰子上也可能出现多个相同的数。

输出格式
输出 非传递骰子(春季每日一题 51)_枚举_29 行。如果有可能为骰子 非传递骰子(春季每日一题 51)_i++_14 分配数字使得第 非传递骰子(春季每日一题 51)_#include_40 个测试用例成为一个非传递的骰子集合,则第 非传递骰子(春季每日一题 51)_#include_40 行输出 非传递骰子(春季每日一题 51)_测试用例_42,否则输出 非传递骰子(春季每日一题 51)_i++_43

数据范围
非传递骰子(春季每日一题 51)_测试用例_44
所有骰子面上的数字均是 非传递骰子(春季每日一题 51)_#include_27非传递骰子(春季每日一题 51)_测试用例_13 的整数。

输入样例:

3
4 5 6 7 2 4 5 10
2 2 2 2 1 1 1 1
1 1 1 1 2 2 2 2

输出样例:

yes
no
no

样例解释
第一个子测试用例对应题目中的例子。

在第二个子测试用例中,不存在骰子 非传递骰子(春季每日一题 51)_i++_14 可以使得这个骰子集合是非传递的。

同理第三个子测试用例的答案也是 非传递骰子(春季每日一题 51)_i++_43

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 10;

int t;
int n = 4;
int a[3][N];

int get(int a[], int b[]){

int r1 = 0, r2 = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(a[i] > b[j]) r1++;
else if(a[i] < b[j]) r2++;
return r1 > r2;
}

bool check(int a[][N]){

for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 3; k++)
if(i != j && i != k && j != k){

if(get(a[i], a[j]) && get(a[j], a[k]) && get(a[k], a[i]))
return true;
}

return false;
}

int main(){

cin >> t;
while(t--){

for(int i = 0; i < n; i++) cin >> a[0][i];
for(int i = 0; i < n; i++) cin >> a[1][i];

bool flag = false;
for(int i = 1; i <= 10; i++)
for(int j = 1; j <= 10; j++)
for(int k = 1; k <= 10; k++)
for(int l = 1; l <= 10; l++){
a[2][0] = i, a[2][1] = j, a[2][2] = k, a[2][3] = l;
if(check(a)) {
flag = true;
break;
}
}

if(flag) puts("yes");
else puts("no");
}

return 0;
}


举报

相关推荐

0 条评论