PAT 1028
水题使人快乐。
两个知识点:
c++字符串字典序比较:
string s1 = "12sdjsadj";
string s2 = "r26retywrewt";
s1.compare(s2);
若s1的字典序大于s2,则返回正数,若小于,则返回负数,相等则返回0。
这一题用cincout会卡最后一个测试点,改成scanfprintf就可以了。printfc++里的string还是%s,但是需要将string调用.c_str()变成c语言字符串。
代码:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
struct student{
string id;
string name;
string grade;
}s[100005];
int N,C;
bool cmp(student &s1,student &s2){
if(C==1){
return s1.id.compare(s2.id)<0;
}
if(C==2){
return s1.name.compare(s2.name)==0?s1.id.compare(s2.id)<0:s1.name.compare(s2.name)<0;
}
if(C==3){
return s1.grade.compare(s2.grade)==0?s1.id.compare(s2.id)<0:s1.grade.compare(s2.grade)<0;
}
return 0;
}
int main(){
cin>>N>>C;
for(int i = 0;i < N;i++){
cin>>s[i].id>>s[i].name>>s[i].grade;
}
sort(s, s+N, cmp);
for(int i = 0;i < N;i++){
printf("%s %s %s\n",s[i].id.c_str(),s[i].name.c_str(),s[i].grade.c_str());
//cout<<s[i].id<<" "<<s[i].name<<" "<<s[i].grade<<endl;
}
}
397 ms