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;
}