336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
순서대로 국가 메달정보가 입력되는 줄 알고 왜 안되지?...... 하며, 이상한데..... 생각했었음...
그런데 문제에 왜 순서가 주어질까 생각해보니 그거를 사용해서 문제를 푸는 거였는데
... 그걸 안봤다
순서대로 주어지는 입력에 그대로 국가순서가 아니라
맨앞에 주어지는 것이 국가의 고유번호이다.
1) 국가 수, 요구 국가 번호
2) 요구 국가 번호와 메달 입력시 국가번호가 equal 이면 want 배열에 값을 저장한다.
3) 이후 내림차순 정렬하고
4) rank를 매기고
5) want에 적힌 수와 동등한 메달수를 가진 국가의 rank를 출력한다. .........
.........
......!!!!!!!!!!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include<cstdio> #include<vector> #include<algorithm> #include<functional> using namespace std; typedef vector<int> VI; typedef vector<VI> VVI; int main(){ int n, k; scanf("%d%d",&n, &k); VVI v = VVI(n,VI(4,0)); int want[3]; for(int i = 0 ; i < n ; i++){ int kth = 0; scanf("%d%d%d%d",&kth, &v[i][0], &v[i][1], &v[i][2]); if(kth == k){ for(int j = 0 ; j < 3 ; j++) want[j] = v[i][j]; } } sort(v.begin(),v.end(),greater<VI>()); int ans = 1; v[0][3] = 1; for(int i = 1 ; i < n ; i++){ bool isEqual = false; if(v[i-1][0] == v[i][0]){ if(v[i-1][1] == v[i][1]){ if(v[i-1][2] == v[i][2]){ // 동석차면 isEqual = true; v[i][3] = v[i-1][3]; ans++; } } } if(!isEqual){ // 동석차가 아니면 ans++; v[i][3] = ans; } } for(int i = 0 ; i < n; i++){ if(want[0] == v[i][0]){ if(want[1] == v[i][1]){ if(want[2] == v[i][2]){ printf("%d",v[i][3]); break; } } } } return 0; } | cs |