洛谷——排序

2019-11-17

11:30:34

#include<iostream>
using namespace std;
int n,a[1000001];
void qsort(int l,int r){
    int mid = a[(l+r)/2];//中间数
    int i = l,j = r;
    do{
        while(a[i]<mid) i++;
        while(a[j]>mid) j--;
        if(i<=j){
            swap(a[i],a[j]);
            i++;
            j--;
        }
    } while(i<=j);//这里注意要有=
    if(l<j) qsort(l,j);//递归搜索左半部分 
    if(i<r) qsort(i,r); //递归搜索右半部份 
}
int main(){
    cin>>n;
    for(int i=1;i<=n;++i) cin>>a[i];
    qsort(1,n);
    for(int i=1;i<n;++i) cout<<a[i]<<" ";
    return 0;
} 

 

 

#include<bits/stdc++.h>
using namespace std;
set<int> s;
int a[105];
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>a[i];
        s.insert(a[i]);
    }
    cout<<s.size()<<endl;
    while(!s.empty()){
        cout<<*s.begin()<<" ";
        s.erase(s.begin());
    }
    return 0;
}

万能头文件:

 

 

 解法1:

#include<bits/stdc++.h>
using namespace std;
int n,m,i,f,k[5001],s[5001],sub[5001];
bool cmp(int a,int b){
    if(s[a] == s[b]){
        return k[a]<k[b];
    }
    return s[a] > s[b];
}
int main(){
    cin>>n>>m;
    for(int i = 1;i<=n;++i){
        cin>>k[sub[i]=i]>>s[i];
    }
    sort(sub+1,sub+n+1,cmp);
    f = s[sub[int(m*1.5)]];//分数线
    for(i=1;s[sub[i]]>=f;++i);
    cout<<f<<" "<<i-1<<endl;
    for(i=1;s[sub[i]]>=f;++i){
        cout<<k[sub[i]]<<" "<<s[sub[i]]<<endl; 
    } 
} 

 

 

 比较100位的数字,属于高精度。直接上字符串

#include<bits/stdc++.h>
#define f(a,b,c) for(int a=b;a<=c;a++)
#define f1(a,b,c) for(int a=b;a>=c;i--)
using namespace std;

bool cmp(pair<int,string> a,pair<int,string> b){
    if(a.second.size() != b.second.size()){
        return a.second.size() > b.second.size();
    }else
        return a.second>b.second;
}
int main(){
    pair<int,string> t[21];
    int n;
    cin>>n;
    f(i,1,n) cin>>t[i].second,t[i].first = i;
    sort(t+1,t+n+1,cmp);
    cout<<t[1].first<<"
"<<t[1].second;
    return 0;
} 

原文地址:https://www.cnblogs.com/JasonPeng1/p/11875953.html