#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
struct stu {
int ID;
int C;
int M;
int E;
int A;
int bestRank;
char bestItem;
stu(int id, int c, int m, int e) :ID(id), C(c), M(m), E(e) {
A = (c + m + e) / 3;
}
};
bool compA(stu s1,stu s2)
{
return s1.A > s2.A;
}
bool compC(stu s1, stu s2)
{
return s1.C > s2.C;
}
bool compM(stu s1, stu s2)
{
return s1.M > s2.M;
}
bool compE(stu s1, stu s2)
{
return s1.E > s2.E;
}
int main()
{
int N, M;
cin >> N >> M;
if (N == 0)
{
int x;
for (int i = 0; i < M; i++)
{
cin >> x;
cout << "N/A" << endl;
}
return 0;
}
int id, c, m, e;
vector<stu>students; //建立一个数组,数组元素是stu型
for (int i = 0; i < N; i++)
{
cin >> id >> c >> m >> e;
students.push_back(stu(id, c, m, e)); //填充进最后
}
sort(students.begin(), students.end(), compA); //srot(开始位置,结束位置,比较)比较是返回>就是降序
int rankA = 1;
students[0].bestRank = 1;
students[0].bestItem = 'A';
for (int i = 1; i < N; i++)
{
if (students[i].A < students[i - 1].A)
rankA += 1;
students[i].bestRank = rankA;
students[i].bestItem = 'A';
}
sort(students.begin(), students.end(), compC);
int rankC = 1;
if (students[0].bestRank != 1)
{
students[0].bestRank = 1;
students[0].bestItem = 'C';
}
for (int i = 1; i < N; i++)
{
if (students[i].C < students[i - 1].C)
rankC += 1; //这里是i+1,不是rankC+=1;序号是1 1 3这种,不是1 1 2
if (rankC < students[i].bestRank)
{
students[i].bestRank = rankC;
students[i].bestItem = 'C';
}
}
sort(students.begin(), students.end(), compM);
int rankM = 1;
if (students[0].bestRank != 1)
{
students[0].bestRank = 1;
students[0].bestItem = 'M';
}
for (int i = 1; i < N; i++)
{
if (students[i].M < students[i - 1].M)
rankM += 1;
if (students[i].bestRank > rankM)
{
students[i].bestRank = rankM;
students[i].bestItem = 'M';
}
}
sort(students.begin(),students.end(), compE);
int rankE = 1;
if (students[0].bestRank > rankE)
{
students[0].bestRank = rankE;
students[0].bestItem = 'E';
}
for (int i = 1; i < N; i++)
{
if (students[i].E < students[i - 1].E)
rankE += 1;
if (students[i].bestRank > rankE)
{
students[i].bestRank = rankE;
students[i].bestItem = 'E';
}
}
map<int, int>map;
for (int i = 0; i < N; i++)
map[students[i].ID] = i; //ID的序号和map对应的序号相等起来,都是第i个
int x;
while (M--)
{
cin >> x;
if (map.find(x) == map.end())
cout << "N/A" << endl;
else
cout << students[map[x]].bestRank << " " << students[map[x]].bestItem << endl;
}
return 0;
}
http://blog.csdn.net/tuzigg123/article/details/46967265源代码
sort头文件include<algorithm>
map头文件include<map>