标签:its ram element second with center tip ica ati
unsigned x = A, y = B, z = C;
unsigned rng61() {
unsigned t;
x ^= x << 16;
x ^= x >> 5;
x ^= x << 1;
t = x;
x = y;
y = z;
z = t ^ x ^ y;
return z;
}
题意:
给你一个长度n的排列,给你生成排列的函数
求m次第k小
题解:
nth_element
表示在数组A的[0,n-1]中找到第k小的并放在第k个位置,并且前k-1个位置均为小于A[k]的数
#include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define ls i<<1 #define rs ls | 1 #define mid ((ll+rr)>>1) #define pii pair<int,int> #define MP make_pair typedef long long LL; const long long INF = 1e18+1LL; const double pi = acos(-1.0); const int N = 1e7+10, M = 1e3+20,inf = 2e9; unsigned x,y,z; unsigned rng61() { unsigned t; x ^= x << 16; x ^= x >> 5; x ^= x << 1; t = x; x = y; y = z; z = t ^ x ^ y; return z; } struct ss{ int id,x; bool operator<(const ss& r) const{ return x < r.x; } }b[N]; int n,m; unsigned ans[N],a[N]; int main() { int cas = 1; while(scanf("%d%d%u%u%u",&n,&m,&x,&y,&z)!=EOF) { for(int i = 1; i <= m; ++i) scanf("%d",&b[i].x),b[i].id = i; for(int i = 0; i < n; ++i) a[i] = rng61(); sort(b+1,b+m+1); b[m+1].x = n; for(int i = m; i >= 1; --i) { nth_element(a,a+b[i].x,a+b[i+1].x); ans[b[i].id] = a[b[i].x]; } printf("Case #%d: ",cas++); for(int i = 1; i < m; ++i) printf("%u ",ans[i]); printf("%u\n",ans[m]); } }
HDU 6040 Hints of sd0061 nth_element函数
标签:its ram element second with center tip ica ati
原文地址:http://www.cnblogs.com/zxhl/p/7289293.html