为了提高健康水平,晨晨班级开始进行体操训练了!晨晨班级总共N位同学,为了评估她们学习不同的体操技术的进度。
K 次训练课的每一次(1≤K≤10),老师都会根据 N位同学的表现给她们进行排名(1≤N≤20)。之后,她对这些排名的一致性产生了好奇。如果其中一位同学在每次训练课中都表现得都比另一位要好,那么称一对同学是一致的。
请帮助老师计算一致的同学的对数。
输入格式
输入的第一行包含两个正整数 K 和 N。
以下 K 行每行包含整数 1…N 的某种排列,表示同学们的排名(同学们用编号 1…N 进行区分)。如果在某一行中 同学A 出现在同学 B 之前,表示同学 A 表现得比同学B 要好。
输出格式
输出一行,包含一致的同学的对数。
输入/输出例子1
输入:
3 4
4 1 2 3
4 1 3 2
4 2 1 3
输出:
4
样例解释:
输入的第2行:4 1 2 3 表示4号同学是第1名,1号同学第2名,2号同学第3名,3号同学第4名。
一致的同学对为 (1,4)、(2,4)、(3,4) 和 (1,3).
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef int in;
const in N=1010;
in n,m;
int main()
{
cin>>n>>m;
in p[n][n];
memset(p,0,sizeof(p));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int x;
scanf("%d", &x);
p[i][x]=j;
}
}
int res=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
bool flag=true;
for(int k=1;k<=n;k++)
if(p[k][i]>=p[k][j])flag = false;
if(flag!=0)res++;
}
}
cout<<res<<endl;
return 0;
}