求调或hack数据
查看原帖
求调或hack数据
309796
jknbhbuy楼主2022/10/27 20:30

已过样例,自己造了几组数据与题解对比也没有差异,但是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;
} 
2022/10/27 20:30
加载中...