※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 11946번 문제인 ACM-ICPC이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/11946
11946번: ACM-ICPC
대회가 끝난 후 팀 별 성적을 순위에 따라 출력한다. 만약 순위가 같으면 팀 번호가 빠른 것을 먼저 출력한다. 각 팀마다 팀 번호, 푼 문제 수, 총 시간을 출력한다.
www.acmicpc.net
문제에서 주어진 것과 같이 각 팀의 푼 문제수와 "총 시간"을 계산하자. 그리고 주어진 우선순위에 맞춰 문제에서 요구하는 대로 출력하는 것으로 문제를 해결할 수 있다.
이 과정에서 팀 i가 문제 m을 틀린 횟수 cnt[i][m](단, 이미 맞아서 더 이상 볼 필요가 없을 경우 -1)과 같은 변수를 이용하면 구현을 편리하게 할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, M, Q;
int cnt[101][16];
int ansP[101], ansC[101];
pair<pair<int, int>, int> ans[100];
bool comp(pair<pair<int, int>, int>& p1, pair<pair<int, int>, int>& p2) {
if (p1.first.first != p2.first.first) return p1.first.first > p2.first.first;
if (p1.first.second != p2.first.second) return p1.first.second < p2.first.second;
return p1.second < p2.second;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M >> Q;
while (Q--) {
int t, i, m; string s; cin >> t >> i >> m >> s;
if (cnt[i][m] < 0) continue;
if (s == "AC") {
ansP[i] += cnt[i][m] * 20 + t, ansC[i]++;
cnt[i][m] = -1;
}
else cnt[i][m]++;
}
for (int i = 0; i < N; i++) {
ans[i].first = make_pair(ansC[i + 1], ansP[i + 1]), ans[i].second = i + 1;
}
sort(ans, ans + N, comp);
for (int i = 0; i < N; i++) cout << ans[i].second << ' ' << ans[i].first.first << ' ' << ans[i].first.second << '\n';
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 16209 // C++] 수열 섞기 (0) | 2023.09.12 |
---|---|
[BOJ 25367 // C++] 너무 시시했다 (0) | 2023.09.11 |
[BOJ 27198 // C++] kex (0) | 2023.09.08 |
[BOJ 3895 // C++] 그리고 하나가 남았다 (0) | 2023.09.07 |
[BOJ 27285 // C++] L-Board (0) | 2023.09.06 |