同號且同位數且數字完全相等時,切記要傳回false
不然兩個數不停的被交換就會出現RE(應該是這個原因吧?我也不確定)
參考:
#include <bits/stdc++.h>
using namespace std;
bool cmp(string a,string b){ if(a[0]=='-' && b[0]=='-'){ if(a.length()==b.length()){ for(int i=1;i<a.length();i++){ if(a[i]!=b[i]){ return a[i]>b[i]; } } return false; } else{ return a.length()>b.length(); } } else if(a[0]=='-' && b[0]!='-'){ return true; } else if(a[0]!='-' && b[0]=='-'){ return false; } else{ if(a.length()==b.length()){ for(int i=0;i<a.length();i++){ if(a[i]!=b[i]){ return a[i]<b[i]; } } return false; } else{ return a.length()<b.length(); } }
}int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; string s; vector<string> v; while(cin>>n){ v.clear(); for(int i=0;i<n;i++){ cin>>s; v.push_back(s); } sort(v.begin(),v.end(),cmp); for(int i=0;i<n;i++){ cout<<v[i]<<"\n"; } }
return 0;}