题解 P5831 【[USACO19DEC]Cow Gymnastics奶牛体操】

· · 题解

这是2019年USACO的第一题

(我居然是此题第一篇题解的发布者)

下面简述主要想法:

先开两个二维数组,一个来存储数据,另一个【i】【j】来存储第i天第j头奶牛的排名

再通过暴力来求出个数

/*八卦几句:(不感兴趣可跳过)

上次我在我的一篇题解中用了我同学的名字作变量名,于是他又在他的题解里用了我的名字……

所以我又要拿他的名字再作一次变量名【嘿嘿!】

*/

行了,上代码了:

#include <bits/stdc++.h>//不解释了
using namespace std;
int n,k;//输入数据
int zjl=0;//计数器———同学名字(呵呵)
int a[11][21],c[11][21];//a输入数据,c存排名
int main()
{
//读入部分
    scanf("%d%d",&k,&n);//输入k和n
    for(int i=1;i<=k;i++)//双层循环读入
    {
        for(int j=1;j<=n;j++)
        {
            scanf("%d",&a[i][j]);//输入a数组
            c[i][a[i][j]]=j;//这里存储第i天第j头奶牛的排名               
        }
    }
    //以下为暴力阶段
    for(int i=1;i<=n;i++)//三层暴力
    {
        for(int j=1;j<=n;j++)
        {
            int cnt=0;//内部计数器
            for(int x=1;x<=k;x++)//枚举每一天
            {
                if(c[x][i]>c[x][j])//如果排名是大于
                {
                    cnt++;
                }
            }
            if(cnt==k)//cnt等于k说明是每一天排名都一致,可以算作是一致的一对
            {
                zjl++;//于是乎,计数器自增
            }
        }
    }
    printf("%d",zjl);//输出“一致的”对数
    return 0;//结束
}

大家别急着抢前排,看懂了再说话,并且禁止抄袭!