自认为完美 但有两分没有调试成功
点击打开链接
#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
struct subject{//这一题充分利用了库函数 写复杂了 按照各科成绩分类更合理
string coarse;
double grade;
};
struct stu{
string id;
subject c;
subject m;
subject e;
subject a;
};
int type;//鉴别排序 的类型
vector<stu> qw1;
vector<stu> qw2;
vector<stu> qw3;
vector<stu> qw4;
bool cmp(stu a,stu b)
{ if(type==4) {
return a.a.grade>b.a.grade;}
if(type==1) return a.c.grade>b.c.grade;
if(type==2) return a.m.grade>b.m.grade;
if(type==3) return a.e.grade>b.e.grade;
}
string coarse;
double grade;
};
struct stu{
string id;
subject c;
subject m;
subject e;
subject a;
};
int type;//鉴别排序 的类型
vector<stu> qw1;
vector<stu> qw2;
vector<stu> qw3;
vector<stu> qw4;
bool cmp(stu a,stu b)
{ if(type==4) {
return a.a.grade>b.a.grade;}
if(type==1) return a.c.grade>b.c.grade;
if(type==2) return a.m.grade>b.m.grade;
if(type==3) return a.e.grade>b.e.grade;
}
int rank2;
subject fun(string id)//返回一个学生最高的一门学科 这是挺关键的一步 注意相同的排名要空出来
{
int ar,cr,mr,er;
for(rank2=0;rank2<qw1.size();rank2++)
{ ar=cr=mr=er=0;
if(qw1[rank2].id==id) return qw1[rank2].a;
if(qw2[rank2].id==id) return qw2[rank2].c;
if(qw3[rank2].id==id) return qw3[rank2].m;
if(qw4[rank2].id==id) return qw4[rank2].e;
}
}
int main()
{ stu tem;
tem.a.coarse="A";
tem.e.coarse="E";
tem.m.coarse="M";
tem.c.coarse="C";
string temp;
double cgra,mgra,egra;
int pep,cpep;
cin>>pep>>cpep;
for(int i=0;i<pep;i++)
{
cin>>tem.id>>tem.c.grade>>tem.m.grade>>tem.e.grade;
tem.a.grade=tem.c.grade+tem.m.grade+tem.e.grade;
qw1.push_back(tem);
qw2.push_back(tem);
qw3.push_back(tem);
qw4.push_back(tem);
}
type=4;
sort(qw1.begin(),qw1.end(),cmp);
type=1;
sort(qw2.begin(),qw2.end(),cmp);
type=2;
sort(qw3.begin(),qw3.end(),cmp);
type=3;
sort(qw4.begin(),qw4.end(),cmp);
subject fun(string id)//返回一个学生最高的一门学科 这是挺关键的一步 注意相同的排名要空出来
{
int ar,cr,mr,er;
for(rank2=0;rank2<qw1.size();rank2++)
{ ar=cr=mr=er=0;
if(qw1[rank2].id==id) return qw1[rank2].a;
if(qw2[rank2].id==id) return qw2[rank2].c;
if(qw3[rank2].id==id) return qw3[rank2].m;
if(qw4[rank2].id==id) return qw4[rank2].e;
}
}
int main()
{ stu tem;
tem.a.coarse="A";
tem.e.coarse="E";
tem.m.coarse="M";
tem.c.coarse="C";
string temp;
double cgra,mgra,egra;
int pep,cpep;
cin>>pep>>cpep;
for(int i=0;i<pep;i++)
{
cin>>tem.id>>tem.c.grade>>tem.m.grade>>tem.e.grade;
tem.a.grade=tem.c.grade+tem.m.grade+tem.e.grade;
qw1.push_back(tem);
qw2.push_back(tem);
qw3.push_back(tem);
qw4.push_back(tem);
}
type=4;
sort(qw1.begin(),qw1.end(),cmp);
type=1;
sort(qw2.begin(),qw2.end(),cmp);
type=2;
sort(qw3.begin(),qw3.end(),cmp);
type=3;
sort(qw4.begin(),qw4.end(),cmp);
for(int i=0;i<cpep;i++)
{
cin>>temp;
subject store2;
int j;
bool flag=false;
for(j=0;j<qw1.size();j++)
{ if(qw1[j].id==temp) {
flag=true;
break;}
}
int z;int k;
if(!flag) cout<<"N/A"<<endl;
else{
store2=fun(temp);
if(store2.coarse=="A")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
{
cin>>temp;
subject store2;
int j;
bool flag=false;
for(j=0;j<qw1.size();j++)
{ if(qw1[j].id==temp) {
flag=true;
break;}
}
int z;int k;
if(!flag) cout<<"N/A"<<endl;
else{
store2=fun(temp);
if(store2.coarse=="A")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
if(k!=0&&qw1[k].a.grade==qw1[k-1].a.grade) z--;
else z=k; if(qw1[k].id==temp) break;
}
}
if(store2.coarse=="C")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
if(k!=0&&qw2[k].c.grade==qw2[k-1].c.grade) z--;
else z=k;if(qw2[k].id==temp) break;}
}
if(store2.coarse=="M")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
if(k!=0&&qw3[k].m.grade==qw3[k-1].m.grade) z--;
else z=k; if(qw3[k].id==temp) break;}
}
if(store2.coarse=="E")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
else z=k; if(qw1[k].id==temp) break;
}
}
if(store2.coarse=="C")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
if(k!=0&&qw2[k].c.grade==qw2[k-1].c.grade) z--;
else z=k;if(qw2[k].id==temp) break;}
}
if(store2.coarse=="M")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
if(k!=0&&qw3[k].m.grade==qw3[k-1].m.grade) z--;
else z=k; if(qw3[k].id==temp) break;}
}
if(store2.coarse=="E")
{
for(k=0,z=0;k<qw1.size();k++,z++) {
if(k!=0&&qw4[k].e.grade==qw4[k-1].e.grade) z--;
else z=k; if(qw4[k].id==temp) break;
}
}
cout<<z+1<<" "<<store2.coarse<<endl;}
}
return 0;
}
else z=k; if(qw4[k].id==temp) break;
}
}
cout<<z+1<<" "<<store2.coarse<<endl;}
}
return 0;
}