Rsort排序模板题求调。
  • 板块灌水区
  • 楼主wzcyh
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/10/18 22:30
  • 上次更新2023/10/27 06:57:22
查看原帖
Rsort排序模板题求调。
493543
wzcyh楼主2022/10/18 22:30

RT。我调了好久了,求求大佬帮帮我!!!

一直只有40分,怎么回事啊!!!

#include<bits/stdc++.h>
using namespace std;
int n,m,a[10000005];
inline int read(){
    int x;
    cin>>x;
    return x;
}//读优
inline void write(int x){
    cout<<x<<" ";//以空格隔开
    return ;
}//输优
inline bool check(){
    for(int i=1;i<=m;i++)if(a[i]>a[i+1])return 0;//check部分,因为要求从小到大,前面肯定不能比后面大。
    return 1;
}//Om的复杂度
inline void Rsort(){
    for(int i=1;i<=10000005;i++){
        int x=(rand()%m)+1,y=(rand()%m)+1;//很模板的一个Rsort,随机选取两个数进行对比交换。
        if(x==y)continue;//没有与自己交换的必要
        if(rand()%2){//随机交换,有极大的概率是正确的。
            swap(a[x],a[y]);//既然判断正确,那就交换。
            if(check())break;//既然都排序完了,肯定退出。
        }
    }
}
int main(){
    srand((int)time(NULL));//很模板的一句话。
    n=read(),m=read();
    for(int i=1;i<=m;i++)a[i]=read();
    a[m+1]=2147483647;//因为check是与后一个比较,当i=m的时候需要特判。
    Rsort();
    for(int i=1;i<=m;i++)write(a[i]);
    return 0;
}
2022/10/18 22:30
加载中...