比赛结果|模拟枚举算法
2024-08-12 00:11:28
发布于:浙江
22阅读
0回复
0点赞
第二题 - Tournament Result
题目跳转:比赛结果。
第二题也是一道纯暴力的模拟题目,双层 for
循环依照题目题干的要求判断点 和点 所存的值是否存在冲突就行了。这边我用了一个 check
函数来检查是否存在冲突。如果存在冲突直接返回结果即可。
这边判断冲突的 check
函数我觉得值得讲一下,分类讨论:
- 如果双方胜负状态相同且不是平局,则返回
false
。 - 如果一方是平局二另一方不是平局,则返回
false
。 - 可以证明其余的情况一定是合法的,直接返回
true
即可,不需要跟其他题解一样大费周章来写条件分支语句。
代码时间复杂度:。
本题的 AC 代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
int n;
char arr[1005][1005];
bool check(char a, char b){
if (a == b && a != 'D')
return false;
if (a == 'D' && b != a)
return false;
return true;
}
int main(){
cin >> n;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
cin >> arr[i][j];
for (int i=1; i<=n; i++){
for (int j=1; j<=n; j++){
// 当 i == j 的时候,跳过枚举。
if (i == j) continue;
if (!check(arr[i][j], arr[j][i])){
cout << "incorrect" << endl;
return 0;
}
}
}
cout << "correct" << endl;
return 0;
}
这里空空如也
有帮助,赞一个