洛谷 - P1012 - 拼數 - 排序
阿新 • • 發佈:2019-01-27
bug != col sin 應該 lse def 數據 max
https://www.luogu.org/problemnew/show/P1012
這道水題居然翻車了,還發現不了bug,服氣了。並不是空字符一定比不空要好,要取決於替代它的字符的大小。所以還是直接比較兩個字符串互相接後面的長短就好了。
錯誤代碼如下:
#include<bits/stdc++.h> using namespace std; #define ll long long string s[20]; int n; struct cmp{ bool operator()(string s1,string s2){ int n1=s1.length();int n2=s2.length(); int ml=max(s1.length(),s2.length()); for(int i=0;i<ml;i++){ if(i<n1&&i<n2&&s1[i]!=s2[i]) return s1[i]>s2[i]; else{ if(i==n1) return 1; else if(i==n2)return 0; } } return 0; } }; int main(){ cin>>n; for(int i=0;i<n;i++) cin>>s[i]; sort(s,s+n,cmp()); string ans; for(int i=0;i<n;i++) ans+=s[i]; cout<<ans<<endl; }
翻車的數據還是很簡單的:
6 321 32 407 135 13 217
好吧,正確的寫法應該是:
#include<bits/stdc++.h> using namespace std; #define ll long long string s[20]; int n; struct cmp{ bool operator()(string s1,string s2){ return s1+s2>s2+s1; } }; int main(){ cin>>n; for(int i=0;i<n;i++) cin>>s[i]; sort(s,s+n,cmp()); string ans; for(int i=0;i<n;i++) ans+=s[i]; cout<<ans<<endl; }
洛谷 - P1012 - 拼數 - 排序