专题链接:https://codeforces.com/group/5yyKg9gx7m/contest/269717/problem/A
思路
这道题乍一看没什么思路,但经过观察可以发现,如果两头牛之间的胜负关系是确定的话,那么一头牛的排名总是在另一头牛的前面,我们可以维护一个二维数组来记入他们的胜负关系,从而得出哪些牛的胜负是恒定的。
创建一个布尔类型二维数组记录i是否输给过j,初始化为1,后根据写入数据更新数组即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<climits>
#include<vector>
#include<queue>
#include<stack>
#define lowbit(i) ((i)&(-(i)))
#define ll long long
using namespace std;
bool m[21][21];//用于记录胜负关系的数组
int K, N;
int t[21];
int main()
{
cin >> K >> N;
for (int i = 1; i <= N; i++)初始化
{
for (int j = 1; j <= N; j++)
{
if (i != j)
m[i][j] = 1;
}
}
while (K--)
{
for (int i = 1; i <= N; i++)
scanf("%d", &t[i]);
for (int i = N; i >= 2; i--)//更新数组
{
for (int j = i - 1; j >= 1; j--)
{
m[t[i]][t[j]] = 0;
}
}
}
int ans=0;
for (int i = 1; i <= N; i++)//如果i从来没有输给过j,则答案+1
{
for (int j = 1; j <= N; j++)
{
if (m[i][j] == 1)
ans++;
}
}
printf("%d\n", ans);
return 0;
}