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


    我又来水题解了略略略

    因为我太菜了,所以这次写个黄题的题解…

    luogu传送门:看我点我QWQ.

    下面是题目搬运


    题目描述

    输入 n(n<5000000且n为奇数) 个数字 a_i(0<a_i<10^9),输出这些数字的第 k 小的数。最小的数是第0小。

    输入格式

    输出格式

    输入输出样例

    输入 #1
    5 1
    4 3 2 1 5
    
    输出 #1
    2
    

    我严重怀疑这是道红题

    这不只是排序吗???

    先讲一下我一开始的思路:

    将输入的数列进行排序,然后输出第 k 小的数不就完了吗?

    对呀,的确完了…

    然后附上我第一次做时候的代码(60分):

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        int a[n];
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        printf("%d",a[m]);
        return 0;
    }
    

    结果是3AC,2TLE(我当时心态崩了QWQ)

    没错,再看一下题目

    n(n<5000000且n为奇数)

    数组太大了,导致快排也超时。

    这个时候需要用到另一个函数:

    nth_element(a,a+m,a+n);
    

    这个函数的意思是:

    将a数组中的第n项,排到数列第n个位置

    这个函数在这个头文件里:

    #include<algorithm>//和sort在一个头文件中
    

    然后附上AC代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        int a[n];
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        nth_element(a,a+m,a+n);
        printf("%d",a[m]);
        return 0;
    }
    

    这就是它黄题的原因吧(~ ̄▽ ̄)~

  • 相关阅读:
    Linux的网络配置
    Linux进程
    我需要的电脑配置
    spring注解配置
    spring中集合的配置
    getProperty()方法的参数和用途
    树的遍历
    单词变换
    最短路径dijkstra算法
    文件路径
  • 原文地址:https://www.cnblogs.com/Kyriech-Francis/p/Answer_P1923.html
Copyright © 2020-2023  润新知