A.Cow Gymnastics 奶牛体操

GDUT 2020寒假训练 排位赛一 A

原题链接

  • A. Cow Gymnastics

题目

A.Cow Gymnastics 奶牛体操_第1张图片

描述

In order to improve their physical fitness, the cows have taken up gymnastics! Farmer John designates his favorite cow Bessie to coach the N other cows and to assess their progress as they learn various gymnastic skills. In each of K practice sessions (1≤K≤10), Bessie ranks the N cows according to their performance (1≤N≤20). Afterward, she is curious about the consistency in these rankings. A pair of two distinct cows is consistent if one cow did better than the other one in every practice session.
Help Bessie compute the total number of consistent pairs.。

输入输出

The first line of the input file contains two positive integers K and N. The next K lines will each contain the integers 1…N in some order, indicating the rankings of the cows (cows are identified by the numbers 1…N). If A appears before B in one of these lines, that means cow A did better than cow B.
Output, on a single line, the number of consistent pairs.

样例

input
3 4
4 1 2 3
4 1 3 2
4 2 1 3
output
4

题目大意

有K组排名和N个人,若每一次排名中x比y都排在前面则说明x比y优秀。输出一共有多少组优秀的组合。

思路

模拟
思路是这样的 ,类似邻接矩阵,如果cmp[x][y]>0并且cmp[y][x]等于0就说明x至少一次排在y前面,但是y从没在x前面,也就是x一直在y前。
那么在读入排名的时候就对cmp数组进行赋值,每组排名每读入一个数,就循环使cmp[当前数字][后面的所有数]都自增。
最后判断的时候也是对每一个数字进行循环检查,检查他和后面的数字是否符合上述cmp[x][y]的关系。符合就计数一次。

代码

#include
#include
#include
#include
#include
using namespace std;
int cmp[30][30];
int num[30]; 
int main()
{
	int n,m;
	cin>>m>>n;
	memset(cmp,0,sizeof cmp);
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>num[j];
		}
		for(int j=1;j<=n-1;j++)
		{
			for(int k=j+1;k<=n;k++)
			{
				cmp[num[j]][num[k]]++;
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i==j)continue;
			if(cmp[i][j]>0&&cmp[j][i]==0)ans++;
		}
	}
	cout<<ans<<endl;
	return 0;
}

你可能感兴趣的:(排位赛)