• P2-2017级算法第二次上机 C 第k顺序统计量


    题目描述

    给定3个整数A, B, C, 和数组第一个数a[1]。数组a由如下方式得到。询问a中第k小的数是多少。

    for(int i = 2; i <= 3000000; ++i)

    a[i] = ((1LL * a[i - 1] * A ^ B) + C) % 1000000007;

    输入

    多组组数据,每组数据一行,数据组数不超过7

    每行5个整数A, B, C, a[1], k (保证五个数为int范围内正整数且k3000000范围内)

    输出

    对于每组数据,输出一行,第k小的数。

    输入样例

    4 5 6 7 8

    输出样例

    972

    思路

    第k顺序统计量查找,推荐使用STL的nth_element通过,选择分治的思想也可以,但是直接进行排序是一定无法通过的。时间复杂度O(n)。

    关于nth_element:

    头文件:<algorithm>

    作用:nth_element作用为求第n大的元素,并把它放在第n位置上,下标是从0开始计数的,也就是说求第0小的元素就是最小的数。

    还不是特别清楚,亟待解决。

    参考代码

     1 #include<cstdio>  
     2 #include<algorithm>  
     3 const int MAXN = 3000002;  
     4 int a[MAXN],A,B,C,k;  
     5 using namespace std;  
     6 int main()  
     7 {  
     8     while(scanf("%d%d%d%d%d",&A,&B,&C,&a[1],&k) == 5){  
     9         for(int i = 2;i <= 3000000;i++)  
    10             a[i] = ((1LL * a[i-1] * A ^ B)+C)%1000000007;  
    11         nth_element(a+1,a+k,a+3000001);  
    12         printf("%d
    ",a[k]);  
    13     }  
    14 }  
  • 相关阅读:
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    ajax 几种提交方式
  • 原文地址:https://www.cnblogs.com/zjsyzmx0527/p/10186827.html
Copyright © 2020-2023  润新知