UVA - 12412 ​​​​​​​A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)

A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)

 UVA - 12412 

题目传送门

emmmm,不想表达什么,udbug上的数据全过,可就是WA。。。。

AC了的代码(大佬的代码)

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

const string subject[4]={"Chinese","Mathematics","English","Programming"};

struct abc{
    string sid,cid,name;
    int goal[4];int tot;
};

int ope;
vector<abc> v;
vector<abc> temp;
map<string,int> ranking;

void output_message(){
    cout<<"Welcome to Student Performance Management System (SPMS)."<<endl<<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<<endl;
}

void tip(int idx){
    if (idx==1) cout<<"Please enter the SID, CID, name and four scores. Enter 0 to finish."<<endl;
    if (idx==2) cout<<"Please enter SID or name. Enter 0 to finish."<<endl;
    if (idx==3) cout<<"Please enter SID or name. Enter 0 to finish."<<endl;
    if (idx==4) cout<<"Showing the ranklist hurts students' self-esteem. Don't do that."<<endl;
    if (idx==5) cout<<"Please enter class ID, 0 for the whole statistics."<<endl;
}

bool found_student_by_sid(string sid){
    for (abc temp:v) if (temp.sid==sid) return true;
    return false;
}

int _remove(string par,int p){
    int cnt = 0;
    vector<abc> newv;newv.clear();
    for (int i = 0;i < (int) v.size();i++){
        if ( (p==0 && v[i].sid == par) || (p==1 && v[i].name == par)  ){
            cnt++;
        }else newv.push_back(v[i]);
    }
    v.resize((int)newv.size());
    v = newv;
    return cnt;
}

bool cmp(abc a,abc b){
    return a.tot>b.tot;
}

int main(){
    //freopen("/home/ccy/rush.txt","r",stdin);
    //freopen("/home/ccy/rush_out.txt","w",stdout);
    ios::sync_with_stdio(0),cin.tie(0);
    while (1){
        output_message();
        cin >> ope;
        if (ope==1){
            while(1){
                tip(1);
                abc temp;
                cin >> temp.sid;
                if (temp.sid=="0") break;
                temp.tot = 0;
                cin >> temp.cid >> temp.name;
                for (int i = 0;i < 4;i++){
                    cin >> temp.goal[i];
                    temp.tot+=temp.goal[i];
                }
                if (found_student_by_sid(temp.sid))
                    cout<<"Duplicated SID."<<endl;
                else
                    v.push_back(temp);
            }
        }
        if (ope==2){
            while (1){
                tip(2);
                string s;
                cin >> s;
                if (s=="0") break;
                int p = 0;
                if (s[0]>='A' && s[0]<='Z') p = 1;
                cout<<_remove(s,p)<<" student(s) removed."<<endl;
            }
        }
        if (ope==3){
            while (1){
                tip(3);
                string s;
                cin >> s;
                if (s=="0") break;
                temp.resize((int)v.size());
                for (int i = 0;i < (int)v.size();i++) temp[i] = v[i];
                sort(temp.begin(),temp.end(),cmp);
                for (int i = 0;i < (int)v.size();i++){
                    int cur = i+1,j = i;
                    ranking[temp[i].sid] = cur;
                    while (j+1<(int)v.size() && temp[j+1].tot==temp[i].tot) {
                        j++;
                        ranking[temp[j].sid] = cur;
                    }
                    i = j;
                }
                int p = 0;
                if (s[0]>='A' && s[0]<='z') p = 1;
                for (int i = 0;i < (int)v.size();i++){
                    if ( (p==0 && v[i].sid == s) || (p==1 && v[i].name==s) ){
                        cout<<ranking[v[i].sid]<<" ";
                        cout<<v[i].sid<<" "<<v[i].cid<<" "<<v[i].name<<" ";
                        for (int j = 0;j < 4;j++) cout<<v[i].goal[j]<<" ";
                        cout<<v[i].tot<<" ";
                        cout<<fixed<<setprecision(2)<<1.0*v[i].tot/4.0+(1e-5)<<endl;
                    }
                }
            }
        }
        if (ope==4) tip(4);
        if (ope==5){
            tip(5);
            string s;
            cin >> s;
            for (int i = 0;i < 4;i++){
                int cntb60 = 0,cntl60 = 0,tot =0,cnt = 0;
                for (int j = 0;j < (int)v.size();j++){
                    if (v[j].cid==s || s=="0"){
                        if (v[j].goal[i]>=60){
                            cntb60++;
                        }else cntl60++;
                        tot+=v[j].goal[i];
                        cnt++;
                    }
                }
                cout<<subject[i]<<endl;
                cout<<"Average Score: ";
                cout<<fixed<<setprecision(2)<<1.0*tot/(1.0*cnt)+(1e-5)<<endl;

                cout<<"Number of passed students: "<<cntb60<<endl;
                cout<<"Number of failed students: "<<cntl60<<endl;
                cout<<endl;
            }
           cout<<"Overall:"<<endl;
           int cnt[5]={0};
           for (int i = 0;i < (int)v.size();i++)
               if (v[i].cid==s || s=="0"){
                  int temp = 0;
                  for (int j = 0;j < 4;j++){
                    if (v[i].goal[j]>=60) temp++;
                  }
                  cnt[temp]++;
               }
           cout<<"Number of students who passed all subjects: "<<cnt[4]<<endl;
           for (int i = 3;i >= 1;i--) cnt[i]+=cnt[i+1];
           for (int i = 3;i >= 1;i--)
                cout<<"Number of students who passed "<<i<<" or more subjects: "<<cnt[i]<<endl;
           cout<<"Number of students who failed all subjects: "<<cnt[0]<<endl;
           cout<<endl;
        }

        if (ope==0){
            break;
        }
    }
    return 0;
}

我的WA了的代码(心塞)

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
struct node
{
	char SID[15];
	int CID;
	char name[15];
	int Chi;
	int Eng;
	int Math;
	int Pra;
	int all;
	double average;
	bool ju;
	int paiming;
	int numpass;
	int id;
}Stu[1000];
bool cmp(node a,node b)
{
	return a.all>b.all;
}
bool cmp1(node a,node b)
{
	return a.id<b.id;
}
int cnt;
void miue()
{
	printf("Welcome to Student Performance Management System (SPMS).\n\n");
	printf("1 - Add\n");
	printf("2 - Remove\n");
	printf("3 - Query\n");
	printf("4 - Show ranking\n");
	printf("5 - Show Statistics\n");
	printf("0 - Exit\n\n");
}
int choice_1()
{
	printf("Please enter the SID, CID, name and four scores. Enter 0 to finish.\n");
	char a[15];char nape[15];
	int b;
	int c1,c2,c3,c4;
	scanf("%s",a);
	if(a[0]=='0'&&strlen(a)==1)
		return 0;
	scanf("%d %s %d %d %d %d",&b,nape,&c1,&c2,&c3,&c4);
	rep(i,1,cnt) {if(strlen(Stu[i].SID)!=0&&Stu[i].ju==false) continue;if(strcmp(Stu[i].SID,a)==0) {printf("Duplicated SID.\n");return 1;}}
	cnt++;
	strcpy(Stu[cnt].SID,a);Stu[cnt].CID=b;strcpy(Stu[cnt].name,nape);Stu[cnt].Chi=c1;Stu[cnt].Math=c2;Stu[cnt].Eng=c3;Stu[cnt].Pra=c4;
	Stu[cnt].all=c1+c2+c3+c4;
	Stu[cnt].average=(double)Stu[cnt].all/4.0;
	Stu[cnt].ju=true;
	int k=4;
	if(c1<60) k--;if(c2<60) k--;if(c3<60) k--;if(c4<60) k--;
	Stu[cnt].numpass=k;
	Stu[cnt].id=cnt;
	return 1;
}
int choice_2()
{
	printf("Please enter SID or name. Enter 0 to finish.\n");
	char s[15];
	int num=0;
	scanf("%s",s);
	if(s[0]=='0'&&strlen(s)==1) return 0;
	if(s[0]>='A'&&s[0]<='Z'){
		rep(i,1,cnt) {
			if(Stu[i].ju==false) continue;
			if(strcmp(Stu[i].name,s)==0) {
				Stu[i].ju=false;
				num++;
			}
		}
	}
	else {
		rep(i,1,cnt) {
			if(Stu[i].ju==false) continue;
			if(strcmp(Stu[i].SID,s)==0) {
				Stu[i].ju=false;
				num++;
			}
		}
	}
	printf("%d student(s) removed.\n",num);
	return 1;
}
int choice_3()
{
	sort(Stu+1,Stu+cnt+1,cmp);
	int np1=1,np2=1;
	int nape;
	int i=1;
	while(!Stu[i].ju) i++;
	Stu[i].paiming=np1;
	nape=Stu[i].all;
	i++;
	for(;i<=cnt;i++) {
		if(Stu[i].ju==false) continue;
		else {
			if(Stu[i].all==nape) {Stu[i].paiming=np1;np2++;}
			else {np2++;nape=Stu[i].all;Stu[i].paiming=np2;np1=np2;}
		}
	}
	sort(Stu+1,Stu+1+cnt,cmp1);
	printf("Please enter SID or name. Enter 0 to finish.\n");
	char s[15];
	scanf("%s",s);
	if(s[0]=='0'&&strlen(s)==1) return 0;
	if(s[0]>='A'&&s[0]<='Z'){
		rep(i,1,cnt) {
			if(strcmp(Stu[i].name,s)==0&&Stu[i].ju==true) {
				printf("%d %s %d %s %d %d %d %d %d %.2f\n",Stu[i].paiming,Stu[i].SID,Stu[i].CID,Stu[i].name,Stu[i].Chi,Stu[i].Math,Stu[i].Eng,Stu[i].Pra,Stu[i].all,Stu[i].average);
			}
		}
	}
	else {
		rep(i,1,cnt) {
			if(strcmp(Stu[i].SID,s)==0&&Stu[i].ju==true) {
				printf("%d %s %d %s %d %d %d %d %d %.2f\n",Stu[i].paiming,Stu[i].SID,Stu[i].CID,Stu[i].name,Stu[i].Chi,Stu[i].Math,Stu[i].Eng,Stu[i].Pra,Stu[i].all,Stu[i].average);
			}
		}
	}
	return 1;
}
void choice_4()
{
	printf("Showing the ranklist hurts students' self-esteem. Don't do that.\n");
}
void choice_5()
{
	printf("Please enter class ID, 0 for the whole statistics.\n");
	int ClassID;
	double num=0.0;
	double allC=0.0;
	double allM=0.0;
	double allE=0.0;
	double allP=0.0;
	double aveC=0.0;
	double aveM=0.0;
	double aveE=0.0;
	double aveP=0.0;
	int numPC=0,numPM=0,numPE=0,numPP=0;
	int numFC=0,numFM=0,numFE=0,numFP=0;
	int pass4=0,pass3=0,pass2=0,pass1=0,pass0=0;
	scanf("%d",&ClassID);
	if(ClassID!=0) {
		rep(i,1,cnt) {
			if(Stu[i].ju==false) continue;
			if(Stu[i].CID==ClassID) {
				allC=allC+Stu[i].Chi;
				allM=allM+Stu[i].Math;
				allE=allE+Stu[i].Eng;
				allP=allP+Stu[i].Pra;
				if(Stu[i].Chi>=60) numPC++;else numFC++;
				if(Stu[i].Math>=60) numPM++;else numFM++;
				if(Stu[i].Eng>=60) numPE++;else numFE++;
				if(Stu[i].Pra>=60) numPP++;else numFP++;
				if(Stu[i].numpass==4) pass4++;
				if(Stu[i].numpass==3) pass3++;
				if(Stu[i].numpass==2) pass2++;
				if(Stu[i].numpass==1) pass1++;
				if(Stu[i].numpass==0) pass0++;
				num++;
			}
		}
	}
	else {
		rep(i,1,cnt) {
			if(Stu[i].ju==false) continue;
			allC=allC+Stu[i].Chi;
			allM=allM+Stu[i].Math;
			allE=allE+Stu[i].Eng;
			allP=allP+Stu[i].Pra;
			if(Stu[i].Chi>=60) numPC++;else numFC++;
			if(Stu[i].Math>=60) numPM++;else numFM++;
			if(Stu[i].Eng>=60) numPE++;else numFE++;
			if(Stu[i].Pra>=60) numPP++;else numFP++;
			if(Stu[i].numpass==4) pass4++;
			if(Stu[i].numpass==3) pass3++;
			if(Stu[i].numpass==2) pass2++;
			if(Stu[i].numpass==1) pass1++;
			if(Stu[i].numpass==0) pass0++;
			num++;
		}
	}
	if(num!=0) {aveC=allC/num;aveM=allM/num;aveE=allE/num;aveP=allP/num;}
	else aveC=aveM=aveE=aveP=0;
	printf("Chinese\n");
	if(aveC!=0) printf("Average Score: %.2lf\n",aveC);
	else printf("Average Score: -nan\n");
	printf("Number of passed students: %d\n",numPC);
	printf("Number of failed students: %d\n\n",numFC);
	printf("Mathematics\n");
	if(aveM!=0) printf("Average Score: %.2lf\n",aveM);
	else printf("Average Score: -nan\n");
	printf("Number of passed students: %d\n",numPM);
	printf("Number of failed students: %d\n\n",numFM);
	printf("English\n");
	if(aveE!=0) printf("Average Score: %.2lf\n",aveE);
	else printf("Average Score: -nan\n");
	printf("Number of passed students: %d\n",numPE);
	printf("Number of failed students: %d\n\n",numFE);
	printf("Programming\n");
	if(aveP!=0) printf("Average Score: %.2lf\n",aveP);
	else printf("Average Score: -nan\n");
	printf("Number of passed students: %d\n",numPP);
	printf("Number of failed students: %d\n\n",numFP);
	printf("Overall:\n");
	printf("Number of students who passed all subjects: %d\n",pass4);
	printf("Number of students who passed 3 or more subjects: %d\n",pass3+pass4);
	printf("Number of students who passed 2 or more subjects: %d\n",pass2+pass3+pass4);
	printf("Number of students who passed 1 or more subjects: %d\n",pass1+pass2+pass3+pass4);
	printf("Number of students who failed all subjects: %d\n\n",pass0);
}
int main() 
{
	#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    #endif
    //freopen("out.txt", "w", stdout);
    //ios::sync_with_stdio(0),cin.tie(0);
    int idx;
    miue();
    while(scanf("%d",&idx)&&idx)
    {
    	int nape;
    	if(idx==1) {
    		while(1) {
    			nape=choice_1();
    			if(nape==0) break;
    		}
    	}
    	if(idx==2) {
    		while(1) {
    			nape=choice_2();
    			if(nape==0) break;
    		}
    	}
    	if(idx==3) {
    		while(1) {
    			nape=choice_3();
    			if(nape==0) break;
    		}
    	}
    	if(idx==4) {
    		choice_4();
    	}
    	if(idx==5) {
    		choice_5();
    	}
    	miue();
    }
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值