UVA - 12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
阿新 • • 發佈:2018-12-04
A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
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; }