PAT A 1012. The Best Rank
坑点在于同分同名次,后面的名次又加回去
i.e. 1 1 3 3 3 6 这种情况
#include <bits/stdc++.h>
using namespace std;
struct V
{
string s;
int a[10]; //A C M E
void read()
{
cin >> s >> a[1] >> a[2] >> a[3];
a[0] = (a[1] + a[2] + a[3]) / 3;
}
};
int loc;
bool cmp(V a, V b)
{
return a.a[loc] > b.a[loc];
}
int main()
{
//freopen("in", "r", stdin);
int n, m;
scanf("%d%d\n", &n, &m);
vector<V> v;
v.resize(n);
for (int i = 0; i < n; i++) {
v[i].read();
}
for (int i = 0; i < 4; i++) {
loc = i;
sort(v.begin(), v.end(), cmp);
int r = 1;
v[0].a[i + 4] = r;
for (int j = 1; j < n; j++) {
if (v[j].a[i] < v[j - 1].a[i]) r = j + 1;
v[j].a[i + 4] = r;
}
}
for (int i = 0; i < n; i++) {
int t = min(v[i].a[4], min(v[i].a[5], min(v[i].a[6], v[i].a[7])));
for (int j = 4; j < 8; j++) {
if (t == v[i].a[j]) {
v[i].a[8] = t;
v[i].a[9] = j - 4;
break;
}
}
}
for (int i = 0; i < m; i++)
{
string s;
cin >> s;
bool flag = true;
for (auto e : v) {
if (e.s == s) {
flag = false;
cout << e.a[8] << ' ';
if (e.a[9] == 0) cout << 'A';
if (e.a[9] == 1) cout << 'C';
if (e.a[9] == 2) cout << 'M';
if (e.a[9] == 3) cout << 'E';
cout << endl;
//break;
}
}
if (flag) {
cout << "N/A" << endl;
}
}
}