#5用把cin改成scanf居然就不超时了...

P1923 【深基9.例4】求第 k 小的数

Inoriant @ 2022-08-23 01:02:52

#include<bits/stdc++.h>
using namespace std;
int num[100000001],n;int k;
int mysort(int a,int b){
    int mid=num[(a+b)/2],i=a,j=b;
    while(i<=j){
        while(num[i]<mid)i++;
        while(num[j]>mid)j--;
        if(i<=j){swap(num[i],num[j]);i++;j--;}
    }
    if(i<=k)mysort(i,b);
    else if(k<=j)mysort(a,j);
    else {cout<<num[k];exit(0);}

}
int main(){

    cin>>n>>k;
    k+=1;
    for(int i=1;i<=n;i++)scanf("%d",&num[i]);//用cin会超时
    mysort(1,n);

    return 0;
}

改了半天#5一直超时 结果把cin换成scanf过了... cin和scanf的效率差别原来真的这么大吗


by HeCao2008 @ 2022-08-23 01:44:48

tlqtj,建议阅读新用户必读

如果是JC当我没说


by ud2_ @ 2022-08-23 01:45:12

如果只用 std::cin 输入那么在 main 开头加上 std::ios_base::sync_with_stdio(false)


by wangzl @ 2022-08-23 07:29:18

啊这不是常识吗


by SegTree @ 2022-08-23 07:31:34

@HeCao2008 不认为这是讨论区题解。lz 的问题是:

cin和scanf的效率差别原来真的这么大吗


by _l_l_ @ 2022-08-23 07:49:15

@HeCao2008 建议重新阅读本贴而非新用户必读


by JackMerryYoung @ 2022-08-23 08:01:50

@_ll 赞同。

@HeCao2008 这人只是在问问题吧。


by LeTu_Jun @ 2022-08-23 08:24:44

cin 如果不加优化语句比 scanf 慢上几倍


by HeCao2008 @ 2022-08-23 11:52:38

@Inoriant 对不起楼主我错了!!!实在抱歉。

cin 如果不关同步流比scanf慢上好多,也就是说如果,读入量非常大,比如说1e6,就不用cin,用scanf(或者快读)

当然,你也可以关闭同步流,int main 里面加这句:

ios::sync_with_stdio(false);


by Inoriant @ 2022-08-23 22:55:20

我本身不是弄信息竞赛的而且刚刚开始学 所以这些了解的比较少 不好意思... 不过谢谢各位大佬的解答了


|