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范围内正整数且k在3000000范围内)

输出

对于每组数据,输出一行,第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\n",a[k]);
13     }
14 }  

原文地址:https://www.cnblogs.com/zjsyzmx0527/p/10186827.html

时间: 2024-08-29 13:37:23

P2-2017级算法第二次上机 C 第k顺序统计量的相关文章

2017级算法第二次上机-C.芸如的入学测试

这道题考察的实际就是一个简单的前缀和问题.值的注意的还是取模的问题.两个数取模,以防万一,出现对负数取模的问题 可以先加上mod然后再对mod取模. 能long long就不int #include <algorithm> #include <iostream> using namespace std; const int maxlen = 1e6 + 10; const int mod = 10007; long long ar[maxlen]; long long prefix

2017级算法第二次上机-E.SkyLee的图书整理

这道题考察了map函数的使用,map最简单的理解就是把一个数映射到一个数.然后使用map也类似hash数组的方法即可 map的头文件是<map> map<int,int> 将一个数映射到一个数 #include <algorithm> #include <iostream> #include <map> using namespace std; int main(){ int n,t,x,i,j,k; while(~scanf("%d

P2-2017级算法第二次上机 A ModricWang‘s Real QuickSort Query

题目描述 羊瑞大佬说:"现在的年轻人啊,写个快排都能写错,比如那个辣鸡的ModricWang"觉得他说的情况是真的,决定帮自己复习一下快排的写法. 快排的一个基础操作就是划分(partition),就是将当前的数组分为前后两个部分. 一种较为经典的partition方法是,将数组中处于中间位置(注意,只和位置有关,和大小无关)的元素作为分隔元素,然后将小于它的元素放到左侧,大于它的元素放到右侧,然后对左右两侧分别进行递归操作.在此题中为了统一,如果数组长度为偶数,取靠后的一个作为分隔元

题解:2018级算法第二次上机 Zexal的排座位

题目描述: 样例: 实现解释: 一道看似复杂但实际既是斐波那契变形的题目 知识点:递推,斐波那契 通过问题的描述,可以得到以下规律:(除了座位数为一时)男生坐最后时,倒数第二个一定是女生:女生坐最后,倒数第二个均可.转化:i个位置时男生结尾的情况数等于i-1个位置时女生结尾的情况数,i个位置时女生结尾的情况数等于i-1个位置时的总情况数. 于是便可得出两种解决方案:斐波那契变形和直接循环递推 斐波那契变形: i位置男生结尾的情况 = i-1位置女生结尾情况数 = i-2位置总情况数 i位置女生结

题解:2018级算法第二次上机 Zexal的钢管切割

题目描述: 样例: 实现解释: 经典钢管切割问题的变形:最赔钱切割 知识点:动态规划,钢管切割 实现方法即得出状态转移方程后完善为代码即可,先设数组price[i]存储着i长度钢管切割后的最小值,p[i]存储着i长度钢管不切割的值,price数组既是本问题的dp数组. 经过分析可知状态转移方程为: price[0] = 0; price[i] = min(p[1]+price[i-1],p[2]+price[i-2],...p[i-1]+price[1],p[i]); 因为price[i]已经是

题解:2018级算法第二次上机 Zexal的流水线问题

题目描述: 样例: 实现解释: 最基础的流水线调度问题,甚至没有开始和结束的值 知识点:动态规划,流水线调度 实现方法即得出状态转移方程后完善即可,设a[][i]存储着第一二条线上各家的时间花费,t[][i]存储着i处进行线路切换的花费,f[][i]存储着各线在i处的最小花费. 则对每一个f[][i]应有如下的转移方程: f[0][1] = a[0][1]; f[1][1] = a[1][1]; f[0][i] = min(f[0][i-1]+a[0][i],f[1][i-1]+t[1][i-1

题解:2018级算法第二次上机 Zexal的竞赛

题目描述: 样例: 实现解释: 一道需要一点思考的动态规划题目 知识点:动态规划,数据记录 首先将题目描述调整:分别输入不同分数的题目总分(便于后续计算),当获得了i分数的总分后无法获得i-1和i+1的总分. 于是便可先利用score[i]储存i分数的总分数,用dp[i]储存以前i个分数为范围进行题目选择时的最大可获得分数.dp便是动态规划所用的数组. 于是可得状态转移方程如下: dp[0] = score[0]; dp[1] = score[1]; dp[i] = max(dp[i-2]+sc

09.19算法第二章上机实践报告

算法第二章上机实践报告 https://edu.cnblogs.com/campus/gdwywm/se1803/homework/7608 1.实践题目 7-3 两个有序序列的中位数 https://pintia.cn/problem-sets/1173827583729741824/problems/1173827629514764290 2.问题描述 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A ?0 ?? ,A ?1 ?? ,?,A ?N−1 ?

2017级算法模拟上机准备篇(一)

回顾一下往年的考题知识点: The Last Battle!! 2014级算法期末上机 简单题--I wanna be the 升级者Ⅰ 结构体排序  STL:sort() 简单题--I wanna be the 升级者Ⅱ 二分 :STL : lower_bound () 简单题--Railway Station 数据结构 : 栈操作模拟 简单题--我在东北玩泥巴:博弈论 中等题--零崎的考试:DP 中等题--伪流水线调度:费用流 网络流 中等题--果园连连看:BFS 图论 难题--线段和直线: