PAT 乙級 1015 題解 (Basic Level) Practice
阿新 • • 發佈:2019-01-12
一開始用C++的STL超時,又換成了C語言
#include<stdio.h> #include<stdlib.h> struct stu { int num; int de; int cai; }; int comp(const void *ss1,const void *ss2) { const struct stu * s1 = (const struct stu *)ss1; const struct stu * s2 = (const struct stu *)ss2; int zong1 = s1->de+s1->cai; int zong2 = s2->de+s2->cai; if( zong1!= zong2) return zong1<zong2; if(s1->de!=s2->de) return s1->de<s2->de; return s1->num>s2->num; } int main() { int N,L,H; scanf("%d %d %d",&N,&L,&H); struct stu v[N]; int i,j; for(i=0,j=0;i<N;++i) { stu s; scanf("%d %d %d",&s.num,&s.de,&s.cai); if(s.de<L || s.cai<L) continue; v[j++]=s; } struct stu v1[j]; struct stu v2[j]; struct stu v3[j]; struct stu v4[j]; int j1=0,j2=0,j3=0,j4=0; for(i=0;i<j;++i) { if(v[i].de>=H && v[i].cai>=H) { v1[j1++]=v[i]; continue; } if(v[i].de>=H) { v2[j2++]=v[i]; continue; } if(v[i].de>= v[i].cai) { v3[j3++]=v[i]; continue; } v4[j4++]=v[i]; } qsort(v1,j1,sizeof(struct stu),comp); qsort(v2,j2,sizeof(struct stu),comp); qsort(v3,j3,sizeof(struct stu),comp); qsort(v4,j4,sizeof(struct stu),comp); printf("%d\n",j); for(i=0;i<j1;++i) printf("%d %d %d\n",v1[i].num,v1[i].de,v1[i].cai); for(i=0;i<j2;++i) printf("%d %d %d\n",v2[i].num,v2[i].de,v2[i].cai); for(i=0;i<j3;++i) printf("%d %d %d\n",v3[i].num,v3[i].de,v3[i].cai); for(i=0;i<j4;++i) printf("%d %d %d\n",v4[i].num,v4[i].de,v4[i].cai); return 0; }
下面是超時的程式碼:
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct stu { int num; int de; int cai; }; bool operator<(const stu &s1,const stu &s2) { int zong1 = s1.de+s1.cai; int zong2 = s2.de+s2.cai; if( zong1!= zong2) return zong1>zong2; if(s1.de!=s2.de) return s1.de>s2.de; return s1.num<s2.num; } int main() { int N,L,H; cin>>N>>L>>H; vector<stu> v; int i; for(i=0;i<N;++i) { stu s; cin>>s.num>>s.de>>s.cai; if(s.de<L || s.cai<L) continue; v.push_back(s); } vector<stu> v1; vector<stu> v2; vector<stu> v3; vector<stu> v4; for(i=0;i<v.size();++i) { if(v[i].de>=H && v[i].cai>=H) { v1.push_back(v[i]); continue; } if(v[i].de>=H) { v2.push_back(v[i]); continue; } if(v[i].de>= v[i].cai) { v3.push_back(v[i]); continue; } v4.push_back(v[i]); } sort(v1.begin(),v1.end()); sort(v2.begin(),v2.end()); sort(v3.begin(),v3.end()); sort(v4.begin(),v4.end()); cout<<v.size()<<endl; for(i=0;i<v1.size();++i) cout<<v1[i].num<<" "<<v1[i].de<<" "<<v1[i].cai<<endl; for(i=0;i<v2.size();++i) cout<<v2[i].num<<" "<<v2[i].de<<" "<<v2[i].cai<<endl; for(i=0;i<v3.size();++i) cout<<v3[i].num<<" "<<v3[i].de<<" "<<v3[i].cai<<endl; for(i=0;i<v4.size();++i) cout<<v4[i].num<<" "<<v4[i].de<<" "<<v4[i].cai<<endl; return 0; }