栗子酱
(栗栗子)
21
正解来喽(@ 单均浩的思路)
#include <bits/stdc++.h>
using namespace std;
string a[5010];
int n;
bool cmp(string s1,string s2){
return s1<s2;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
13 个赞
送你一个堆排序
#include<bits/stdc++.h>
using namespace std;
int len,i,n,a[30001],s;
void put(int t)
{
int son,pa;
a[++len]=t;
son=len;
while(son>1)
{
pa=son/2;
if(a[son]>=a[pa]) break;
swap(a[son],a[pa]);
son=pa;
}
}
int get()
{
int pa=1,son,l=a[1];
a[1]=a[len--];
while(pa*2<=len)
{
son=pa*2;
if(son<len&&a[son+1]<a[son]) son++;
if(a[pa]<=a[son]) break;
swap(a[son],a[pa]);
pa=son;
}
return l;
}
void work()
{
int x,y;
for(int i=1;i<=n;++i)
{
cin>>x;
put(x);
}
for(int i=1;i<=n;++i) cout<<get()<<" ";
}
int main()
{
cin>>n;
work();
return 0;
}
12 个赞
搞错了
#include<bits/stdc++.h>
using namespace std;
struct s
{
string b;
int a,id;
}q[10001];
bool cmp(s x,s y)
{
if(x.a==y.a) return x.b<y.b;
return x.a<y.a;
}
int main()
{
int i,n;
cin>>n;
for(i=1;i<=n;++i)
{
q[i].id=i;
cin>>q[i].b;
q[i].a=q[i].b.size();
}
sort(q+1,q+1+n,cmp);
for(i=1;i<=n;++i) cout<<q[i].b<<" ";
return 0;
}
11 个赞
Syxqwq
(Loser_Syx)
30
你这份代码是错的,string 的比较是基于字典序,而楼主要的是实际大小的比较
12 个赞
张晋熔
(张晋熔)
33
emmm这题感觉可以这么搞
#include<bits/stdc++.h>
using namespace std;
string s[5005];
int n;
bool cmp(string a,string b){
if(a.length()!=b.length()){
return a.length()<b.length();
}
return a<b;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
sort(s,s+n,cmp);
for(int i=0;i<n;i++){
cout<<s[i]<<endl;
}
return 0;
}
容易理解,省事
10 个赞
张晋熔
(张晋熔)
34
浅压一手行
#include<bits/stdc++.h>
using namespace std;
string s[5005];
int n;
bool cmp(string a,string b){
if(a.length()!=b.length()) return a.length()<b.length();
return a<b;
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>s[i];
sort(s,s+n,cmp);
for(int i=0;i<n;i++) cout<<s[i]<<endl;
return 0;
}
11 个赞
Syxqwq
(Loser_Syx)
35
我说过 string 的比较是以字典序而不是转 int 的大小了。
10 个赞