求调,样例过了
查看原帖
求调,样例过了
400269
Jorisy楼主2022/3/16 09:43

WA on #1

#include<bits/stdc++.h>
using namespace std;

int _id;

struct stu{
	int rk,s1,s2,s3,s4,sum,id;
	string sid,cid,name;
	double avg;
	bool in()
	{
		cin>>sid;
		if(sid=="0") return false;
		cin>>cid>>name>>s1>>s2>>s3>>s4;
		sum=s1+s2+s3+s4;
        avg=sum/4.00;
        id=++_id;
        return true;
	}
};

vector<stu>v;

void debug()
{
	for(auto i:v)
	{
		cerr<<i.rk<<' '<<i.id<<' '<<i.sid<<' '<<i.cid<<' '<<i.s1<<' '<<i.s2<<' '<<i.s3<<' '<<i.s4<<' '<<i.sum<<' '<<i.avg<<endl;
	}
	puts("");
}

bool cmp(stu x,stu y)
{
	return x.id<y.id;
}

void wel()
{
	puts("Welcome to Student Performance Management System (SPMS).\n\n1 - Add\n2 - Remove\n3 - Query\n4 - Show ranking\n5 - Show Statistics\n0 - Exit\n");
}

bool add_sid(string sid)
{
    for(int i=0;i<v.size();i++)
	{
        if(sid==v[i].sid) return false;
    }
    return true;
}

void add()
{
	while(1)
	{
    	puts("Please enter the SID, CID, name and four scores. Enter 0 to finish.");
   		stu t;
    	if(!t.in()) break;
    	else if(!add_sid(t.sid)) puts("Duplicated SID.");
        else v.push_back(t);
    }
}

int del_rem(string s)
{
	int res=0;
    for(int i=0;i<v.size();i++)
	{
        if(v[i].name==s||v[i].sid==s)
		{
            swap(v[i--],v[(int)v.size()-1]);
            v.pop_back();
            res++;
            sort(v.begin(),v.end(),cmp);
        }
    }
    return res;
}

void del()
{
	while(1)
	{
		puts("Please enter SID or name. Enter 0 to finish.");
	    string s;
	    cin>>s;
	    if(s=="0") break;
	    else cout<<del_rem(s)<<" student(s) removed."<<endl;
	}
}

void qry_fnd(string s)
{
	vector<stu>vt;
    for(int i=0;i<v.size();i++)
	{
        if(v[i].name==s||v[i].sid==s)
		{
			stu t;
        	t=v[i];
        	t.rk=1;
        	for(int j=0;j<v.size();j++)
			{
        		if (v[j].sum>t.sum) t.rk++;
        	}
        	vt.push_back(t);
        }
    }
    for(int i=0;i<vt.size();i++)
	{
    	cout<<vt[i].rk<<' '<<vt[i].sid<<' '<<vt[i].cid<<' '<<vt[i].name<<' '<<vt[i].s1<<' '<<vt[i].s2<<' '<<vt[i].s3<<' '<<vt[i].s4<<' '<<vt[i].sum<<' '<<fixed<<setprecision(2)<<vt[i].avg<<endl;
    }
}

void qry()
{
	while(1)
	{
    	puts("Please enter SID or name. Enter 0 to finish.");
    	string s;
    	cin>>s;
   		if(s=="0") break;
    	else qry_fnd(s);
	}
}

void shw()
{
	puts("Showing the ranklist hurts students' self-esteem. Don't do that.");
}

void stc_out(string s)
{
	int s1s,s2s,s3s,s4s,s1p,s2p,s3p,s4p,s1f,s2f,s3f,s4f,p[10],k;
	double s1a,s2a,s3a,s4a;
	s1s=s2s=s3s=s4s=s1p=s2p=s3p=s4p=s1f=s2f=s3f=s4f=k=0;
	memset(p,0,sizeof(p));
    for(auto i:v)
	{
        if(i.cid==s||s=="0")
		{
            int ps=0;
            k++;
            s1s+=i.s1;
            s2s+=i.s2;
            s3s+=i.s3;
            s4s+=i.s4;
            if(i.s1>=60)
			{
                s1p++;
                ps++;
            }
			else s1f++;
            if(i.s2>=60)
			{
                s2p++;
                ps++;
            }
			else s2f++;
            if(i.s3>=60)
			{
                s3p++;
                ps++;
            }
			else s3f++;
            if(i.s4>=60)
			{
                s4p++;
                ps++;
            }
			else s4f++;
            p[ps]++;
        }
    }
    s1a=(double)s1s/k;
    s2a=(double)s2s/k;
    s3a=(double)s3s/k;
    s4a=(double)s4s/k;
    printf("Chinese\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nMathematics\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nEnglish\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nProgramming\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nOverall:\nNumber of students who passed all subjects: %d\nNumber of students who passed 3 or more subjects: %d\nNumber of students who passed 2 or more subjects: %d\nNumber of students who passed 1 or more subjects: %d\nNumber of students who failed all subjects: %d\n\n",s1a,s1p,s1f,s2a,s2p,s2f,s3a,s3p,s3f,s4a,s4p,s4f,p[4],p[3]+p[4],p[2]+p[3]+p[4],p[1]+p[2]+p[3]+p[4],p[0]);
}

void stc()
{
	puts("Please enter class ID, 0 for the whole statistics.");
   	string s;
   	cin>>s;
   	stc_out(s);
}

int main()
{
	//freopen("uva12412.txt","w",stdout);
	wel();
	int op;
	cin>>op;
	while(1)
	{
		switch(op)
		{
			case 0:
				exit(0);
			case 1:
				add();
				break;
			case 2:
				del();
				break;
			case 3:
				qry();
				break;
			case 4:
				shw();
				break;
			case 5:
				stc();
		}
		wel();
		cin>>op;
		//debug();
	}
}
2022/3/16 09:43
加载中...