【题解】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 @   zhou_ziyi  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示