https://www.acmicpc.net/problem/8979
8979번: 올림픽
입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각
www.acmicpc.net
내가 너무 어렵게 푼건가 ..
#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<map>
#include<stack>
using namespace std;
struct Point {
int i, j, t, cnt, power;
char c;
};
void Prints(vector<vector<int>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<bool>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<char>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j];
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<vector<char>>>maps, int n, int m, int k) {
for (int t = 0; t < k; t++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[t][i][j];
}
cout << endl;
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<vector<bool>>>maps, int n, int m, int k) {
for (int t = 0; t < k; t++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[t][i][j];
}
cout << endl;
}
cout << endl;
}
cout << endl;
}
void Prints(vector<int>line, int n) {
for (int i = 0; i < n; i++) {
cout << line[i] << ",";
}
cout << endl;
}
void Prints(string str, int n) {
for (int i = 0; i < n; i++) {
cout << str[i] << ",";
}
cout << endl;
}
bool compares(vector<long long>&a, vector<long long>&b) {
for (long long i = 1; i < 4; i++) {
if (a[i] == b[i]) {
continue;
}
//cout << a[i] <<","<< b[i]<<endl;
return a[i] > b[i];
}
return false;
}
struct Data {
long long index;
long long value;
};
int main() {
long long n, k;
cin >> n >> k;
vector<vector<long long>>ranks;
vector<long long>checkr(n, 1);
for (long long i = 0; i < n; i++) {
vector<long long>tmpranks;
for (long long j = 0; j < 4; j++) {
long long tmp;
cin >> tmp;
tmpranks.push_back(tmp);
}
ranks.push_back(tmpranks);
}
if (n == 1) {
cout << 1;
return 0;
}
sort(ranks.begin(), ranks.end(), compares);
vector<Data>ranksData;
long long cnt = 1;
bool bCheck = false;
long long linkcnt = cnt;
for (long long i = 0; i < ranks.size() - 1; i++) { //0
Data d;
if (ranks[i][1] == ranks[i + 1][1] && ranks[i][2] == ranks[i + 1][2] && ranks[i][3] == ranks[i + 1][3]) {
d.value = cnt;
d.index = ranks[i][0];
ranksData.push_back(d);
linkcnt++;
bCheck = true;
}
else {
if (bCheck == true) {
d.value = cnt;
d.index = ranks[i][0];
ranksData.push_back(d);
bCheck = false;
cnt = cnt + linkcnt;//2+2
linkcnt = 1;
continue;
}
d.index = ranks[i][0];
d.value = cnt;
ranksData.push_back(d);
cnt++;
}
}
//last
if (ranks[ranks.size() - 2][1] == ranks[ranks.size() - 1][1]
&& ranks[ranks.size() - 2][2] == ranks[ranks.size() - 1][2]
&& ranks[ranks.size() - 2][3] == ranks[ranks.size() - 1][3]) {
Data d;
d.index = ranks[ranks.size() - 1][0];
d.value = cnt;
ranksData.push_back(d);
}
else {
Data d;
if (bCheck == true) {
d.value = cnt;
d.index = ranks[ranks.size() - 1][0];
ranksData.push_back(d);
bCheck = false;
}
else {
d.index = ranks[ranks.size() - 1][0];
d.value = cnt;
ranksData.push_back(d);
}
}
for (long long i = 0; i < ranksData.size(); i++) {
if (k == ranksData[i].index) {
cout << ranksData[i].value;
}
}
return 0;
}