codevs 1361_知识排名_模拟

发布于 2019-05-10  977 次阅读


题目描述

小牛举办了一年一届的知识竞赛,小牛 RK 也参与其中,知识竞赛

规则是一题只有错或对两种情况,且对标志为 1,错标志为 0。每题

的分值为该题错误的人数,小牛 RK 已经知道了每个人的各个题目的

情况,他想让你求出他的总排名。(此表格规定,第一行的序号为 1,

以此类推)。


思路

直接暴力枚举,记录每一题有多少人对,然后按题目要求给每个人加分,最后排序输出就可以了
O(n^2)

#include <stdio.h>
#include <algorithm>
using namespace std;
int a[1001][1001];
struct arr
{
    int l,y;
};
arr f[1001];
int cam(arr a,arr b)
{
    return a.y>b.y||(a.y==b.y&&a.l<b.l);
}
int main()
{
    int x,n,m;
    scanf("%d%d%d",&x,&n,&m);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    for (int i=1;i<=n;i++)
        f[i].l=i;
    for (int i=1;i<=m;i++)
    {
        int t=0;
        for (int j=1;j<=n;j++)
        {
            if (a[j][i]==0) t++;
        }
        for (int j=1;j<=n;j++)
            if (a[j][i]==1) f[j].y+=t;
    }
    sort(f+1,f+n+1,cam);
    for (int i=1;i<=n;i++)
        if (f[i].l==x) printf("%d\n",i);
}