算法1
O(nlogn)
使用了c++11支持的匿名函数(非常方便好用)
stringstream 作为字符串输入输出流,可以替代cin cout使用
sscanf可以从给定的char[]中读取数据
C++ 代码
#include<bits/stdc++.h>
using namespace std;
string logs[10010];
int n;
int main(){
string s;
while(getline(cin,s)){
if(s.size()==0) break;
logs[++n] = s;
}
sort(logs+1,logs+1+n,[](string& a,string& b){
stringstream sa(a),sb(b);
string ssa[5],ssb[5];
for(int i=1;i<=4;++i){
sa>>ssa[i];
sb>>ssb[i];
}
if(ssa[4]==ssb[4]){
return ssa[2]+ssa[3] < ssb[2]+ssb[3];
}else{
double da,db;
sscanf(ssa[4].c_str(),"%lf(s)",&da);
sscanf(ssb[4].c_str(),"%lf(s)",&db);
return da<db;
}
});
sort(logs+1,logs+1+n,cmp);
for(int i=1;i<=n;++i){
cout<<logs[i]<<endl;
}
return 0;
}
sort(logs+1,logs+1+n,cmp); 这一行多余