题目地址:https://www.patest.cn/contests/pat-a-practise/1012
解题思路:按照题目意思解题就可以
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
#define MIN 2000
struct point{
int id;
int M;
int C;
int A;
int E;
int order;
string order_atr;
point(): M(0), C(0), A(0), E(0), order(MIN) {}
};
struct r{
int order;
string colour;
};
vector<r> ans;
vector<point> student;
int rank_A(int index)
{
int order = 1;
for(int i = 0; i < student.size(); i++)
{
if(i == index)
continue;
if(student[index].order <= order)
break;
if(student[index].A < student[i].A)
{
order++;
}
}
if(student[index].order > order)
{
student[index].order = order;
student[index].order_atr = "A";
}
}
int rank_C(int index)
{
int order = 1;
for(int i = 0; i < student.size(); i++)
{
if(i == index)
continue;
if(student[index].order <= order)
break;
if(student[index].C < student[i].C)
{
order++;
}
}
if(student[index].order > order)
{
student[index].order = order;
student[index].order_atr = "C";
}
}
int rank_M(int index)
{
int order = 1;
for(int i = 0; i < student.size(); i++)
{
if(i == index)
continue;
if(student[index].order <= order)
break;
if(student[index].M < student[i].M)
{
order++;
}
}
if(student[index].order > order)
{
student[index].order = order;
student[index].order_atr = "M";
}
}
int rank_E(int index)
{
int order = 1;
for(int i = 0; i < student.size(); i++)
{
if(i == index)
continue;
if(student[index].order <= order)
break;
if(student[index].E < student[i].E)
{
order++;
}
}
if(student[index].order > order)
{
student[index].order = order;
student[index].order_atr = "E";
}
}
int find_student(int id)
{
for(int i = 0; i < student.size(); i++)
{
if(student[i].id == id)
return i;
}
return -1;
}
int main(void)
{
string line;
while(getline(cin, line))
{
int m_n, n_n;
ans.clear();
student.clear();
stringstream ss(line);
ss >> n_n;
ss >> m_n;
//cout << n_n << m_n << endl;
for(int i = 0; i < n_n; i++)
{
point temp;
getline(cin, line);
stringstream sss(line);
sss >> temp.id;
sss >> temp.C;
sss >> temp.M;
sss >> temp.E;
temp.A = (temp.C + temp.M + temp.E) / 3;
student.push_back(temp);
}
for(int i = 0; i < m_n; i++)
{
int id, index;
getline(cin, line);
stringstream ssss(line);
ssss >> id;
index = find_student(id);
if(index == -1)
{
r temp;
temp.order = -1;
temp.colour = "N/A";
ans.push_back(temp);
}
else
{
rank_A(index);
rank_C(index);
rank_M(index);
rank_E(index);
r temp;
temp.order = student[index].order;
temp.colour = student[index].order_atr;
ans.push_back(temp);
}
}
/*output*/
for(int i = 0; i < ans.size(); i++)
{
if(ans[i].colour == "N/A")
cout << "N/A" << endl;
else
cout << ans[i].order << " " << ans[i].colour << endl;
}
//cout << endl;
//cout << "input" << endl;
}
return 0;
}