PAT(Basic Level) Practice : 1015 德才論 (25分)
阿新 • • 發佈:2020-09-18
1015 德才論 (25分)
重點
執行超時問題:
1.使用scanf和printf輸入輸出
2.sort使用algorithm自帶的,配合vector使用,不要自己寫
3.**在輸入的時候直接進行篩選操作,而不是把所有輸入資料儲存完,再一步步操作,這樣會導致3個測試點超時。 **
4.用class或者struct進行封裝,不要使用vector<vectror<> >。
程式碼
#include <iostream> #include"stdlib.h" #include <vector> #include <cstdio> #include <algorithm> #include <sstream> using namespace std; class student{ public: int num1,num2,num3; }; bool compare(student stu1, student stu2) { if((stu1.num2+stu1.num3)!=(stu2.num2+stu2.num3)) return (stu1.num2+stu1.num3)>(stu2.num2+stu2.num3); else if(stu1.num2!=stu2.num2) return stu1.num2>stu2.num2; else return stu1.num1<stu2.num1; } void print_inf(vector<student > Stu) { for(vector<student >::iterator it=Stu.begin();it!=Stu.end();it++) { printf("%d %d %d\n",(*it).num1,(*it).num2,(*it).num3); } } int main() { int Num,Low,High; cin>>Num>>Low>>High; vector<student > Stus; vector<student > Stus1,Stus2,Stus3,Stus4; int sum=0; for(int i=0;i<Num;i++) { student stu; scanf("%d%d%d",&stu.num1,&stu.num2,&stu.num3); if(stu.num2>=Low&& stu.num3>=Low) { sum++; if(stu.num2>=High&&stu.num3>=High) Stus1.push_back(stu); else if(stu.num2>=High&&stu.num3<High) Stus2.push_back(stu); else if(stu.num2<High&&stu.num3<High&&stu.num2>=stu.num3) Stus3.push_back(stu); else Stus4.push_back(stu); } } cout<<sum<<endl; sort(Stus1.begin(),Stus1.end(),compare); sort(Stus2.begin(),Stus2.end(),compare); sort(Stus3.begin(),Stus3.end(),compare); sort(Stus4.begin(),Stus4.end(),compare); print_inf(Stus1); print_inf(Stus2); print_inf(Stus3); print_inf(Stus4); //cout<<"1"<<endl; return 0; }