【例題4-6 uva12412】A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
阿新 • • 發佈:2018-10-24
mes spa new contest ber stat .net sta emp
【鏈接】 我是鏈接,點我呀:)
【題意】
在這裏輸入題意
【題解】
訓練編程的題。
原題中沒有除0的數據,所以別擔心你的代碼是因為除0錯了。
多半跟我一樣。
也是因為沒有+eps
就是比如你要算tot/4的值。
那麽要輸出tot/4+1e-6
不然會錯。。。
浮點誤差...
剩下的。其實很簡答的。。
註意有並列第x的情況就好。
【代碼】
#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; }
【例題4-6 uva12412】A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)