PAT甲级1012
这是一道让我想放弃的题。。。。。。
因为没有好好读题
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
算法不难就是很恶心,很复杂,需要很多排序。。。。
#include<iostream>
using namespace std;
class C{
public:
int c1;
int rank;
};
class ID{
public:
string id;
int rank;
int a;
};
void rankc(C c[],int n)
{
int r[10000];
r[0]=c[0].c1;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(c[i].c1<=r[i-1]){
r[i]=c[i].c1;
break;
}
if(c[i].c1>r[j]){
for(int k=i;k>=j+1;k--){
r[k]=r[k-1];
}
r[j]=c[i].c1;
break;
}
}
}
// for(int i=0;i<n;i++){
// cout<<r[i]<<" ";
// }
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(c[i].c1==r[j] && r[j]!=r[j-1]){
c[i].rank=j+1;
}else if(c[i].c1==r[j] && r[j]==r[j-1]){
for(int k=j;k>0;k--){
if(r[k]==r[k-1]){
continue;
}else{
c[i].rank=k+1;
break;
}
}
}
}
}
// for(int i=0;i<n;i++){
// cout<<c[i].rank;
// }
}
void ranka(ID id[],int n)
{
int r[10000];
r[0]=id[0].a;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(id[i].a<=r[i-1]){
r[i]=id[i].a;
break;
}
if(id[i].a>r[j]){
for(int k=i;k>=j+1;k--){
r[k]=r[k-1];
}
r[j]=id[i].a;
break;
}
}
}
// for(int i=0;i<n;i++){
// cout<<r[i]<<" ";
// }
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(id[i].a==r[j] && r[j]!=r[j-1]){
id[i].rank=j+1;
}else if(id[i].a==r[j] && r[j]==r[j-1]){
for(int k=j;k>0;k--){
if(r[k]==r[k-1]){
continue;
}else{
id[i].rank=k+1;
break;
}
}
}
}
}
// for(int i=0;i<n;i++){
// cout<<c[i].rank;
// }
}
int main(){
int n=0,all=0;
C c[10000];
C m[10000];
C e[10000];
ID id[10000];
cin>>n;
cin>>all;
for(int i=0;i<n;i++){
cin>>id[i].id;
cin>>c[i].c1;
cin>>m[i].c1;
cin>>e[i].c1;
id[i].a=(c[i].c1+m[i].c1+e[i].c1)/3.0+0.5;
}
for(int i=n;i<n+all;i++){
cin>>id[i].id;
}
rankc(c,n);
rankc(m,n);
rankc(e,n);
ranka(id,n);
char w[4]={'A','C','M','E'};
int f=0;
int max=0;
int lg=0,i,j;
// cout<<e[2].rank;
for(j=n;j<n+all;j++){
lg=0;
for(i=0;i<n;i++){
if(id[i].id==id[j].id){
lg=1;
break;
}
}
if(lg==1){
max=id[i].rank;
f=0;
if(c[i].rank<max){
max=c[i].rank;
f=1;
}
if(m[i].rank<max){
max=m[i].rank;
f=2;
}
if(e[i].rank<max){
max=e[i].rank;
f=3;
}
if(j==n+all-1){
cout<<max<<" "<<w[f];
}else{
cout<<max<<" "<<w[f]<<endl;
}
}else if(lg==0){
if(j==n+all-1){
cout<<"N/A";
}else{
cout<<"N/A"<<endl;
}
}
}
}