1 条题解

  • 0
    @ 2026-8-16 9:24:27

    欢迎

    欢迎来到_TNT_ BOOM大讲堂

    相信大家都知道,本题是今年USACOUSACO铜牌组的第一道题。

    首先我们理下思路,

    我们可以先定义一个二维数组FlagFlag,当第a[i]a[i]只奶牛排在第a[j]a[j]之奶牛前面时,我们就可以将flag[a[i]][a[j]]++flag[a[i]][a[j]]++,最后在程序末判断,当flag[a[i]][a[j]]=nflag[a[i]][a[j]] = n时,ans++ans++, 最后输出ansans

    下面我们看下ACAC代码

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int k, n;
    int a[25]; 
    int flag[30][30], cnt = 1;
    int main()
    {
    	//freopen("gymnastics.in", "r", stdin);
    	//freopen("gymnastics.out", "w", stdout);
    	scanf("%d%d", &k, &n);
    	for(int i = 1; i <= k; i++)
    	{
    		for(int j = 1; j <= n; j++)
    			scanf("%d", &a[j]);//输一次,判断一次
    		for(int j = 1; j <= n; j++)
    			for(int k = j; k <= n; k++)
    				if(j < k) flag[a[j]][a[k]]++;//当j 在 k前面时,flag[a[j]][a[k]]++
    	}
    	int ans = 0;
    	for(int i = 1; i <= n; i++)
    		for(int j = 1; j <= n; j++)
    			if(flag[i][j] == k) ans++;//当flag[i][j]这种排列的数等于k次训练课时,ans++
    	printf("%d\n", ans);//输出ans
    	return 0;
    }
    
    

    今天就讲到这里!

    ByeBye!Bye Bye!

    • 1

    信息

    ID
    6927
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    66
    已通过
    24
    上传者