【题解】P6675

题目分析

思路:模拟。

所有选手的的 都以 + 来计算,算出每个选手的 AC 数,时间总和,最后以再排序即可。

Code

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005;
struct Node {
	string s;
	int num;
	int sum;
	bool operator < (const Node o) {
		if (num == o.num) {
			if (sum == o.sum)
				s < o.s;
			return sum < o.sum;
		}
		return num > o.num;
	}
} a[MAXN];
int n, m;
string s1;
int f(int x, int y, int z) { //求一道题的时间
	return x * 3600 + y * 60 + z;
}
int main() {
	scanf("%d %d", &n, &m);
	int k = 0;
	for (int i = 1; i <= n; i++) {	
		cin >> a[i].s;
		if (a[i].s == "NijeZivotJedanACM") {
			k = i;
			for (int j = 1; j <= m; j++)
				cin >> s1;
			continue; //如果是“NijeZivotJedanACM”,在后面输入
		}
		for (int j = 1; j <= m; j++) {
			cin >> s1;
			if (s1[0] == '-')
				continue;
			a[i].sum += (s1[1] - '0') * 1200; //罚时
			a[i].sum += f(s1[3] * 10 + s1[4], s1[6] * 10 + s1[7], s1[9] * 10 + s1[10]); //用时
			a[i].num++;
		}
	}
	cin >> a[k].s;
	for (int i = 1; i <= m; i++) {
		cin >> s1;
		if (s1[0] == '-')
			continue;
		a[k].sum += (s1[1] - '0') * 1200;
		a[k].sum += f(s1[3] * 10 + s1[4], s1[6] * 10 + s1[7], s1[9] * 10 + s1[10]);
		a[k].num++;
	}
	sort(a + 1, a + n + 1); //排序
	for (int i = 1; i <= n; i++) {
		if (a[i].s == "NijeZivotJedanACM") {
			printf("%d", i);
			return 0;
		}
	}
	return 0;
}
posted @ 2022-07-27 21:29  zhou_ziyi  阅读(74)  评论(0)    收藏  举报