#21395: 可以用自訂sort來寫


steven0933775014@gmail.com (107502528)

學校 : 不指定學校
編號 : 83495
來源 : [140.115.213.108]
最後登入時間 :
2021-03-22 04:28:36
a528. 大數排序 | From: [140.115.202.138] | 發表日期 : 2020-05-26 02:59

我發現可以使用sort(vec.begin(),vec.end(),cmp)寫出這一題,大家可以往這個方向想。第一次這樣用覺得神奇!!

#include <bits/stdc++.h>

#include <sstream>

#define ll long long

#define endl '\n'

using namespace std;

bool cmp2(string a,string b){

if(b.size()==a.size()){

for(int i=0;i<b.size();i++){

if(a[i]==b[i])continue;

elsereturn b[i]>a[i];

}

return b.size()>a.size();

}

bool cmp1(string a,string b){

if(a.size()==b.size()){

for(int i=0;i<b.size();i++){

if(a[i]==b[i])continue;

else return a[i]>b[i];

}

}

return a.size()>b.size();

}

int main(){

ios::sync_with_stdio(0);cin.tie(0);

int num;

string s;

vector<string> vec1,vec2;

while(cin >> num){

vec1.clear();

vec2.clear();

for(int i=0;i<num;i++){

cin >> s;

if(s[0]=='-'){

vec1.push_back(s);

}

else{

vec2.push_back(s);

}

}

sort(vec2.begin(),vec2.end(),cmp2);

sort(vec1.begin(),vec1.end(),cmp1);

for(int i=0;i<vec1.size();i++){

cout << vec1[i] << endl;

}

for(int i=0;i<vec2.size();i++){

cout << vec2[i] << endl;

}

}

return 0;

}

 

 
ZeroJudge Forum