这道题很有意思,根据题目分析我们知道,如果想要找到一致的奶牛对数的话,我们需要每一次遍历这个数组,找到谁在谁的前面,从而找到最终,都有那只奶牛一直都在另一只奶牛的前面;
由于数据不大,我们直接暴力,方法是,双层for循环,开一个二维数组,例如4321,循环时。把ans[4][3]=1,ans[4][2]=1,ans[4][1]=1...,一直循环即可。
最终我们会形成一个以左上到右下为对角线,i j与j i互为对称的两个三角形数组,我们只需要遍历一个三角形,只要两个三角形在这个互为相反的位置都为1,那么说明在遍历过程中,至少有一次出现了一次一头牛排名超过另一头牛的情况,那么就不记录,最终直接输出即可:
AC代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int arr[25][25];
int ans[25];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=1;j<=m;j++)
cin>>ans[j];
// for(int j=1;j<=m;j++)
// cout<<ans[j]<<' '<<endl;
for(int j=1;j<=m;j++)
{
for(int k=j;k<=m;k++)
{
arr[ans[j]][ans[k]]=1;
}
}
}
// for(int i=1;i<=m;i++)
// {
// for(int j=1;j<=m;j++)
// {
// cout<<arr[i][j]<<' ';
// }
// cout<<endl;
// }
int all=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=i;j++)
{
if(arr[i][j]==1&&arr[j][i]==1)
continue;
all++;
}
}
cout<<all;
}
完结撒花