Bailian2992 Lab杯【排序】

2992:Lab杯
总时间限制: 5000ms 内存限制: 131072kB
描述
“Lab杯”乒乓球赛就要在PKU的实验室之间举行了。人工智能实验室的学生都是乒乓球的狂热分子,都强烈希望代表实验室去比赛。但是有余名额限制,他们之中只能由一个人被选作代表。

为了让选择的过程公平,他们决定打一次单循环赛,每一对学生之间都打一场五局三胜的比赛。赢得最多比赛的人就将代表实验室去比赛。现在Ava手里有一份表,表里面记录了每一场比赛的比分。她应该让谁去比赛?

输入
输入包含一组测试数据。第一行包含n(2 ≤ n ≤ 100),实验室里学生的数目。接下来给出一个n × n矩阵A。矩阵的每一个元素都是0、1、2、3中的一个。第i行第j列的元素aij是第i个学生在和第j个学生的比赛中赢的局数。aij和aji(i ≠ j)正好有一个是3,另外一个小于3。矩阵的所有对角线元素都是0。

输出
输出赢了最多比赛的学生的编号。如果有平分,选择编号最小的。

样例输入
4
0 0 3 2
3 0 3 1
2 2 0 2
3 3 3 0
样例输出
4
来源
第六届北京大学程序设计大赛暨ACM/ICPC选拔赛, ava

问题链接Bailian2992 Lab杯
问题简述:(略)
问题分析:简单排序问题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian2992 Lab杯 */

#include <bits/stdc++.h>

using namespace std;

const int N = 100;
int a[N + 1][N + 1];
struct Node {
    
    
    int id, win;
} b[N];

bool cmp(Node a, Node b)
{
    
    
    return a.win != b.win ? a.win > b.win : a.id < b.id;
}

int main()
{
    
    
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            scanf("%d", &a[i][j]);

    int cnt = 0;
    for(int i = 1; i <= n; i++) {
    
    
        int sum = 0;
        for(int j = 1; j <= n; j++)
            sum += a[i][j] - a[j][i];
        b[cnt].id = i;
        b[cnt].win = sum;
        cnt++;
    }

    sort(b, b + cnt, cmp);

    printf("%d\n", b[0].id);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/tigerisland45/article/details/108506068