【题解】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;
}
本文来自博客园,作者:zhou_ziyi,转载请注明原文链接:https://www.cnblogs.com/zhouziyi/p/16526570.html

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号