已过样例,自己造了几组数据与题解对比也没有差异,但是WA#1
#include<bits/stdc++.h>
using namespace std;
int op,tot;
struct node
{
string sid,cid,name;
int ch,ma,en,pr;
int sum;
double ava;
int f;
}sd[1005];
struct N
{
int a[1005];
int pou;
};
map<string,int> m;
map<string,N> m2;
void st()
{
cout<<"Welcome to Student Performance Management System (SPMS)."<<endl;
cout<<endl;
cout<<"1 - Add"<<endl;
cout<<"2 - Remove"<<endl;
cout<<"3 - Query"<<endl;
cout<<"4 - Show ranking"<<endl;
cout<<"5 - Show Statistics"<<endl;
cout<<"0 - Exit"<<endl;
cout<<endl;
}
void add(string S)
{
int score;
string s;
if(m.find(S)!=m.end())
{
cin>>s;
cin>>s;
cin>>score;
cin>>score;
cin>>score;
cin>>score;
cout<<"Duplicated SID."<<endl;
return;
}
tot++;
m[S]=tot;
sd[tot].sid=S;
cin>>s;
sd[tot].cid=s;
cin>>s;
sd[tot].name=s;
m2[s].a[++m2[s].pou]=tot;
cin>>score;
sd[tot].ch=score;
cin>>score;
sd[tot].ma=score;
cin>>score;
sd[tot].en=score;
cin>>score;
sd[tot].pr=score;
sd[tot].sum=sd[tot].ch+sd[tot].ma+sd[tot].en+sd[tot].pr;
sd[tot].ava=sd[tot].sum*1.0/4;
}
int cnt;
void del(string S)
{
cnt=0;
if(m.find(S)==m.end()||sd[m[S]].f)
{
return;
}
int goal=m[S];
sd[goal].f=1;
cnt++;
cout<<cnt<<" student(s) removed."<<endl;
return;
}
void ask(string S)
{
if(m2.find(S)!=m2.end())
{
for(int i=1;i<=m2[S].pou;i++)
{
int ths=m2[S].a[i],rk=1;
for(int j=1;j<=tot;j++)
{
if(sd[j].f)continue;
if(sd[j].sum>sd[ths].sum)rk++;
}
cout<<rk<<" "<<sd[ths].sid<<" "<<sd[ths].cid<<" ";
cout<<sd[ths].name<<" "<<sd[ths].ch<<" "<<sd[ths].ma<<" ";
cout<<sd[ths].en<<" "<<sd[ths].pr<<" "<<sd[ths].sum<<" ";
printf("%.2lf\n",sd[ths].ava);
}
}
else if(m.find(S)!=m.end())
{
int ths=m[S],rk=1;
for(int j=1;j<=tot;j++)
{
if(sd[j].f)continue;
if(sd[j].sum>sd[ths].sum)rk++;
}
cout<<rk<<" "<<sd[ths].sid<<" "<<sd[ths].cid<<" ";
cout<<sd[ths].name<<" "<<sd[ths].ch<<" "<<sd[ths].ma<<" ";
cout<<sd[ths].en<<" "<<sd[ths].pr<<" "<<sd[ths].sum<<" ";
printf("%.2lf\n",sd[ths].ava);
}
}
void ShowRank()
{
cout<<"Showing the ranklist hurts students’ self-esteem. Don’t do that."<<endl;
return;
}
void AskData(string cs)
{
double ava_ch=0.0,ava_ma=0.0,ava_en=0.0,ava_pr=0.0;
int yes_ch=0,yes_ma=0,yes_en=0,yes_pr=0;
int zre=0,one=0,two=0,thr=0,fou=0;
int popu=0;
if(cs=="0")
{
for(int i=1;i<=tot;i++)
{
int sc=0;
if(sd[i].f)continue;
popu++;
ava_ch+=sd[i].ch;
ava_ma+=sd[i].ma;
ava_en+=sd[i].en;
ava_pr+=sd[i].pr;
if(sd[i].ch>=60)
{
yes_ch++;
sc++;
}
if(sd[i].ma>=60)
{
yes_ma++;
sc++;
}
if(sd[i].en>=60)
{
yes_en++;
sc++;
}
if(sd[i].pr>=60)
{
yes_pr++;
sc++;
}
if(sc==0)zre++;
if(sc>=1)one++;
if(sc>=2)two++;
if(sc>=3)thr++;
if(sc>=4)fou++;
}
}
else
{
for(int i=1;i<=tot;i++)
{
int sc=0;
if(sd[i].f||sd[i].cid!=cs)continue;
popu++;
ava_ch+=sd[i].ch;
ava_ma+=sd[i].ma;
ava_en+=sd[i].en;
ava_pr+=sd[i].pr;
if(sd[i].ch>=60)
{
yes_ch++;
sc++;
}
if(sd[i].ma>=60)
{
yes_ma++;
sc++;
}
if(sd[i].en>=60)
{
yes_en++;
sc++;
}
if(sd[i].pr>=60)
{
yes_pr++;
sc++;
}
if(sc==0)zre++;
if(sc>=1)one++;
if(sc>=2)two++;
if(sc>=3)thr++;
if(sc==4)fou++;
}
}
ava_ch/=popu;
ava_ma/=popu;
ava_en/=popu;
ava_pr/=popu;
cout<<"Chinese"<<endl;
printf("Average Score: %.2lf\n",ava_ch);
printf("Number of passed students: %d\n",yes_ch);
printf("Number of failed students: %d\n",popu-yes_ch);
cout<<endl;
cout<<"Mathematics"<<endl;
printf("Average Score: %.2lf\n",ava_ma);
printf("Number of passed students: %d\n",yes_ma);
printf("Number of failed students: %d\n",popu-yes_ma);
cout<<endl;
cout<<"English"<<endl;
printf("Average Score: %.2lf\n",ava_en);
printf("Number of passed students: %d\n",yes_en);
printf("Number of failed students: %d\n",popu-yes_en);
cout<<endl;
cout<<"Programming"<<endl;
printf("Average Score: %.2lf\n",ava_pr);
printf("Number of passed students: %d\n",yes_pr);
printf("Number of failed students: %d\n",popu-yes_pr);
cout<<endl;
cout<<"Overall:"<<endl;
cout<<"Number of students who passed all subjects: "<<fou<<endl;
cout<<"Number of students who passed 3 or more subjects: "<<thr<<endl;
cout<<"Number of students who passed 2 or more subjects: "<<two<<endl;
cout<<"Number of students who passed 1 or more subjects: "<<one<<endl;
cout<<"Number of students who failed all subjects: "<<zre<<endl;
}
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
while(1)
{
st();
cin>>op;
if(op==1)
{
string s;
while(1)
{
cout<<"Please enter the SID, CID, name and four scores. Enter 0 to finish."<<endl;
cin>>s;
if(s=="0")break;
else add(s);
}
}
else if(op==2)
{
string s;
while(1)
{
cout<<"Please enter SID or name. Enter 0 to finish."<<endl;
cin>>s;
if(s=="0")break;
else del(s);
}
}
else if(op==3)
{
string s;
while(1)
{
cout<<"Please enter SID or name. Enter 0 to finish."<<endl;
cin>>s;
if(s=="0")break;
else ask(s);
}
}
else if(op==4)
{
ShowRank();
break;
}
else if(op==5)
{
string C;
cout<<"Please enter class ID, 0 for the whole statistics."<<endl;
cin>>C;
AskData(C);
}
else if(op==0)
{
break;
}
}
st();
return 0;
}