https://www.acmicpc.net/problem/3758
3758번: KCPC
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 테스트 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫 번째 줄에는
www.acmicpc.net
생각해 보기
- 정렬의 순서는 다음과 같다.
- 최종 점수가 높은 팀
- 풀이 제출 횟수가 낮은 팀
- 마지막 제출 횟수가 낮은 팀
- 해당 팀의 해당 문제에 대한 점수는 가장 높은 점수로 갱신된다.
코드
#include<iostream>
#include<map>
#include<vector>
#include<tuple>
#include<algorithm>
using namespace std;
int T,n,k,t,m;
typedef struct Data{
int idx,last,num,score;
}d;
bool cmpsort(const d &a, const d &b){
if(a.score == b.score){
if(a.num == b.num)
return a.last < b.last;
return a.num < b.num;
}
return a.score > b.score;
}
void input(){
cin>>n>>k>>t>>m;
}
void calc(){
map<pair<int,int>, int> data;
vector<d> arr(n);
for(int i=0;i<n;++i)
arr[i].idx=i+1;
int i,j,s;
for(int idx=0;idx<m;++idx){
cin>>i>>j>>s;
if(data.find({i,j})!=data.end())
data[{i,j}]=max(data[{i,j}],s);
else
data[{i,j}]=s;
++arr[i-1].num;
arr[i-1].last=idx+1;
}
int idx=0;
for(auto it : data){
int team = it.first.first;
int num = it.first.second;
int score = it.second;
arr[team-1].score+=score;
++idx;
}
sort(arr.begin(),arr.end(),cmpsort);
for(int i=0;i<n;++i){
if(arr[i].idx == t){
cout<<i+1<<'\n';
break;
}
}
}
void solution(){
calc();
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>T;
while(T--){
input();
solution();
}
return 0;
}

728x90
'알고리즘 > 백준 문제' 카테고리의 다른 글
| 19637 - IF 좀 대신 써줘 (0) | 2023.03.07 |
|---|---|
| 20310 - 타노스 (0) | 2023.03.07 |
| 2607 - 비슷한 단어 (0) | 2023.03.06 |
| 17484 - 진우의 달 여행(Small) (0) | 2023.03.03 |
| 19441 - 햄버거 분배 (0) | 2023.03.03 |
댓글