最后两个TLE,求大佬帮助

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

sto_OwenLMZ2022_orz @ 2022-06-10 17:09:36

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    long long n,k,a[1000005];
    ios::sync_with_stdio (false);
    cin>>n>>k;
    for(int i=0;i<n;i++) cin>>a[i];
    nth_element(a,a+k,a+n);
    cout<<a[k];
}

我这明明都写了ios::sync_with_stdio(false);

为啥还是TLE?


by Zvelig1205 @ 2022-06-10 17:19:43

吸氧


by _Virgo_ @ 2022-06-10 17:34:40

@极冬寒雪

试试快读?


by _Virgo_ @ 2022-06-10 17:35:43

@OwenLMZ2022

额。@错了。


by ivyjiao @ 2022-06-10 17:36:33

@OwenLMZ2022 数组小了。

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    long long n,k,a[5000005];
    ios::sync_with_stdio (false);
    cin>>n>>k;
    for(int i=0;i<n;i++) cin>>a[i];
    nth_element(a,a+k,a+n);
    cout<<a[k];
}

by Windows_Update @ 2022-06-10 17:36:36

@OwenLMZ2022
你可能需要对输入卡一下常,可以去学习一下快速读入
(下面这个是读入输出都卡了常)
最主要的问题是,你的数组开小了,题面上写着n \leq 500000 ,而你只开了 100000 改了之后吸不吸氧都能过

#include<iostream>
#include<algorithm>
using namespace std;
inline void read(long long &x){
    x=0;
    char ch=getchar_unlocked();
    while(ch<'0'||ch>'9')
        ch=getchar_unlocked();
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar_unlocked();
    }
    return;
}
void print(long long x){
    if(x>9)print(x/10);
    putchar_unlocked(x%10+48);
}
int main(){
    long long n,k,a[5000005];
    read(n),read(k);
    for(int i=0;i<n;++i) read(a[i]);
    nth_element(a,a+k,a+n);
    print(a[k]);
}

by sto_OwenLMZ2022_orz @ 2022-06-10 17:40:09

@Windows_Update 谢谢指点


by juruolht @ 2022-06-10 18:18:27

主页双帖?


|