[USACO19DEC] Cow Gymnastics B
题目描述
为了提高健康水平,奶牛们开始进行体操训练了!Farmer John 选定了他最喜爱的奶牛 Bessie 来执教其他 N N N 头奶牛,同时评估她们学习不同的体操技术的进度。
K K K 次训练课的每一次,Bessie 都会根据 N N N 头奶牛的表现给她们进行排名。之后,她对这些排名的一致性产生了好奇。称一对不同的奶牛是一致的,如果其中一头奶牛在每次训练课中都表现得都比另一头要好。
请帮助 Bessie 计算一致的奶牛的对数。
输入格式
输入的第一行包含两个正整数 K K K 和 N N N。以下 K K K 行每行包含整数 1 … N 1 \ldots N 1…N 的某种排列,表示奶牛们的排名(奶牛们用编号 1 … N 1 \ldots N 1…N 进行区分)。如果在某一行中 A A A 出现在 B B B 之前,表示奶牛 A A A 表现得比奶牛 B B B 要好。
输出格式
输出一行,包含一致的奶牛的对数。
样例 #1
样例输入 #1
3 4
4 1 2 3
4 1 3 2
4 2 1 3
样例输出 #1
4
提示说明
一致的奶牛对为 ( 1 , 4 ) (1,4) (1,4)、 ( 2 , 4 ) (2,4) (2,4)、 ( 3 , 4 ) (3,4) (3,4) 和 ( 1 , 3 ) (1,3) (1,3)。
1 ≤ K ≤ 10 1 \leq K \leq 10 1≤K≤10, 1 ≤ N ≤ 20 1 \leq N \leq 20 1≤N≤20。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=100;
ll a[N];
bool vis[N][N];//标记
int main()
{
ll k,n;
cin>>k>>n;
//初始化
memset(vis,1,sizeof vis);
while(k--)
{
for(ll i=1;i<=n;i++)
{
cin>>a[i];
//不符合,赋 0
vis[a[i]][a[i]]=0;
}
for(ll i=1;i<=n;i++)
for(ll j=i+1;j<=n;j++)
//不符合 i 在 j 之前
vis[a[j]][a[i]]=0;
}
ll res=0;
for(ll i=1;i<=n;i++)
for(ll j=1;j<=n;j++)
{
// i 一致在 j 之前
if(vis[i][j])
res++;
}
//一致的奶牛对数
cout<<res<<endl;
return 0;
}