社区讨论

78ac,其他RE

B3692[语言月赛202212] 打 ACM 最快乐的就是滚榜读队名了(Easy Version)参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjalxa5
此快照首次捕获于
2025/11/03 23:26
4 个月前
此快照最后确认于
2025/11/03 23:26
4 个月前
查看原帖
#include <cstdio>
#include <cstdlib>
using namespace std;
int name[10000];

struct team {
	string teamname;
	int tinum = 0;
	int timeexed = 0;
	int id;
	bool ac[23] = {0};
	int wa[23] = {0};
	int fbac[23] = {0};
	bool operator<(const struct team &b)const {
		if (this->tinum > b.tinum) {
			return true;
		}
		if (this->timeexed < b.timeexed) {
			return true;
		}
		return false;
	}
};
priority_queue<struct team> paihang;
struct team A[23];
map<string, int>namesi;

int main() {
	int m, n, k, number = 0;
	cin >> m >> n >> k;
	for (int i = 0; i < k; i++) {
		char ti;
		int a, b, c;
		string named, record;
		scanf("%d:%d:%d %c", &a, &b, &c, &ti);
		cin >> named;
		getline(cin, record);
		if (namesi.find(named) == namesi.end()) {
			namesi.insert(make_pair(named, ++number));
			name[namesi.find(named)->second] = number;
			struct team Team;
			Team.id = number;
			Team.teamname = named;
			A[name[namesi.find(named)->second]] = Team;
		}
		if (record[1] == 'A') {
			if (a >= 4 && b + c > 0) {
				A[name[namesi.find(named)->second]].fbac[ti - 'A'] = (a - 4) * 3600 + b * 60 + c;
			} else {
				A[name[namesi.find(named)->second]].ac[ti - 'A'] = true;
				A[name[namesi.find(named)->second]].timeexed += (A[name[namesi.find(named)->second]].wa[ti - 'A'] * 20 + a * 60 + b);
				if (c)
					A[name[namesi.find(named)->second]].timeexed += 1;
				A[name[namesi.find(named)->second]].tinum++;
			}
		} else {
			if (A[name[namesi.find(named)->second]].ac[ti - 'A'] == true
			        || A[name[namesi.find(named)->second]].fbac[ti - 'A'] != 0) {

			} else {
				++A[name[namesi.find(named)->second]].wa[ti - 'A'];
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		paihang.push(A[i]);
	}
	while (!paihang.empty()) {
		if (paihang.size() == 1) {
			cout << paihang.top().teamname << endl;
			break;
		}
		struct team t1 = paihang.top();
		paihang.pop();
		struct team t2 = paihang.top();
		paihang.pop();
		cout << t1.teamname << endl;
		for (int i = 0; i <= n; i++) {
			if (t1.fbac[i] != 0) {
				t1.timeexed += (t1.wa[i] * 20 + (t1.fbac[i] - t1.fbac[i] % 60) / 60);
				t1.fbac[i] = 0;
				t1.ac[i] = 1;
				t1.tinum ++;
				if (t1 < t2) {
					paihang.push(t1);
					paihang.push(t2);
					goto R;
				}
			}
		}
		paihang.push(t2);
R:
		;
	}
}```

回复

1 条回复,欢迎继续交流。

正在加载回复...