#33394: sort 的cmp如果RE


jasperlin0108@gmail.com (Jasper Lin)

學校 : 高雄市立高雄高級中學
編號 : 169403
來源 : [114.40.142.198]
最後登入時間 :
2023-10-05 16:52:06
a528. 大數排序 | From: [220.142.163.205] | 發表日期 : 2023-01-02 12:14

同號且同位數且數字完全相等時,切記要傳回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;
}

 

 
ZeroJudge Forum