1. 程式人生 > 其它 >acwing 1459. 奶牛體操(模擬)

acwing 1459. 奶牛體操(模擬)

目錄

題目傳送門

題目描述

為了提高健康水平,奶牛們開始進行體操訓練了!

農夫約翰選定了他最喜愛的奶牛 Bessie 來執教其他 NN 頭奶牛,同時評估她們學習不同的體操技術的進度。

KK 次訓練課的每一次,Bessie 都會根據 NN 頭奶牛的表現給她們進行排名。

之後,她對這些排名的一致性產生了好奇。

稱一對不同的奶牛是一致的,當且僅當其中一頭奶牛在每次訓練課中都表現得都比另一頭要好。

請幫助 Bessie 計算一致的奶牛的對數。

輸入格式

輸入的第一行包含兩個正整數 KK 和 NN。

以下 KK 行每行包含整數 1…N1…N 的某種排列,表示奶牛們的排名(奶牛們用編號 1…N1…N 進行區分)。

如果在某一行中 AA 出現在 BB 之前,表示奶牛 AA 表現得比奶牛 BB 要好。

輸出格式

輸出一行,包含一致的奶牛的對數。

資料範圍

1≤K≤101≤K≤10,
1≤N≤201≤N≤20

輸入樣例:

3 4
4 1 2 3
4 1 3 2
4 2 1 3

輸出樣例:

4

樣例解釋

一致的奶牛對為 (1,4)、(2,4)、(3,4)、(1,3)(1,4)、(2,4)、(3,4)、(1,3)。

分析題目性質模擬

分析

g[a][b]

表示a在b之前出現的次數,根據每行輸入統計即可

程式碼

#include<iostream>
#include<cstdio>
using namespace std;
const int N = 30;
int a[N];
int g[N][N];
int k, n;
int main()
{
	scanf("%d%d",&k, &n);
	for(int i = 0; i < k; i++)
	{
		for(int j = 0; j < n; j++)
		{
			scanf("%d", &a[j]);
		}
		
		for(int j = 0; j < n - 1; j++)
		{
			for(int t = j + 1; t < n; t++)
			{
				g[a[j]][a[t]]++;
			}
		}
	}
	int ans = 0;
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			if(g[i][j] == k) ans++;
		}
	}
	cout << ans;
	return 0;
	
}

時間複雜度

參考文章