HDU 6040 Hints of sd0061 找第K大数 (nth_element函数)
来源:互联网 发布:lol网络关注 编辑:程序博客网 时间:2024/06/05 14:24
题意是说sd0061给学生出题,准备了一些提示,这些提示的方法是在第j场比赛的时候,把提示给排名为第b_j+1的学生。学生初始的排名为a_i,a_i的计算方法通过题目给的函数来算出来。
unsigned rng61(){ unsigned x = A, y = B, z = C; unsigned t; x ^= x << 16; x ^= x >> 5; x ^= x << 1; t = x; x = y; y = z; z = t ^ x ^ y; return z;}
简单来说,就是找出每场比赛的第K大数,这里学到了nth_element函数,这个函数的作用是将区间内的数进行排序,nth_element(a+l,a+k,a+r),指将区间[l,r]中元素里第k大数放在k位置上,比k大的放在前面,比k小的放在后面,但是除了k以外其他数的排列是无序的,仅用于找第k大数,而这种排列方式的时间复杂度近于线性的,所以可以用这个函数来节省时间。
除此之外还有一个可以优化的地方,在找第K大数的时候反过来进行寻找,因为b_i+b_j<b_k,所以后面的数就不需要再进行更多的处理,注意在处理之前将b[m[的值赋值为n,保证可以跑第一遍循环,全部找出后记录输出就可以了。
下面AC代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;unsigned x,y,z;unsigned a[10000005];unsigned ans[105];struct stud{ int num; int val;};stud b[105];unsigned rng61(){ //unsigned x = A, y = B, z = C; unsigned t; x ^= x << 16; x ^= x >> 5; x ^= x << 1; t = x; x = y; y = z; z = t ^ x ^ y; return z;}bool cmp(stud a1,stud b1){ return a1.val<b1.val;}int main(){ int n,m; int i; int Case=0; while(scanf("%d%d%u%u%u",&n,&m,&x,&y,&z)!=EOF) { for(i=0;i<n;i++) { a[i]=rng61(); //cout<<i<<"->"<<a[i]<<endl; } for(i=0;i<m;i++) { scanf("%d",&b[i].val); b[i].num=i; } sort(b,b+m,cmp); b[m].val=n; for(i=m-1;i>=0;i--) { nth_element(a,a+b[i].val,a+b[i+1].val); ans[b[i].num]=a[b[i].val]; } Case++; cout<<"Case #"<<Case<<":"; for(i=0;i<m;i++) { cout<<" "<<ans[i]; } cout<<endl; } return 0;}
阅读全文
1 0
- HDU 6040 Hints of sd0061 找第K大数 (nth_element函数)
- HDU 6040 Hints of sd0061(nth_element)
- HDU 6040 Hints of sd0061(STL nth_element函数)
- hdu 6040 Hints of sd0061(nth_element)
- HDU-6040 Hints of sd0061(线性找第k小)
- HDU-6040 Hints of sd0061(线性找第k小)
- 【HDU6040】Hints of sd0061(nth_element)
- hdu 6040 Hints of sd0061(STL)
- HDU 6040 Hints of sd0061 (技巧)
- hdu 6040 Hints of sd0061(STL)
- HDU 6040 Hints of sd0061
- [HDU]-6040 Hints of sd0061
- HDU 6040 Hints of sd0061
- HDU-6040 Hints of sd0061
- hdu 6040 Hints of sd0061
- hdu 6040 Hints of sd0061
- 2017多校一 1008题 hdu 6040 Hints of sd0061 排序 STL nth_element
- hdu6040 Hints of sd0061【nth_element使用】
- 《javascrip编程精解》第二版习题练习(未完,根据自己学习进度更新)
- Android中static关键字的理解,及几个面试点
- 自定义控件三部曲之动画篇(八)——PropertyValuesHolder与Keyframe
- (贪心)Codeforces Round #427 B. The number on the board
- Light oj 1104 Birthday Paradox 生日悖论-雀巢原理
- HDU 6040 Hints of sd0061 找第K大数 (nth_element函数)
- js里添加html调用function参数问题
- 模拟天猫--网页定位导航效果
- Linux中三种网络模式是什么意思——NAT(二地址转换模式)
- CodeForces 803C
- LeetCode -- 198. House Robber
- PHP与表单的简单应用
- Python3之内置函数
- 自定义控件三部曲之动画篇(九)——联合动画的代码实现