HDU

来源:互联网 发布:汉语言文学专业 知乎 编辑:程序博客网 时间:2024/06/05 21:01

题目链接:HDU - Hints of sd0061

小于 n 的斐波拉契数为 log1.618nb 数组的最坏情况是斐波拉契数列
STL 中 nth_element(first,first+n,end) 是将第 n 小的数放在数组中的第 n 个位置,且之前的都比 a[n] 小,之后的都比 a[n] 大。
然后可以用类似快排的方法分治处理。。

#include<bits/stdc++.h>#define fi first#define se secondusing namespace std;unsigned x,y,z;const int N=1e7+7;typedef pair<unsigned,int> pii;int n,m;unsigned a[N],ans[107];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;}pii b[107];int main(){    int T=1;    while(cin >> n >> m >> x >> y >> z)    {        for(int i=0;i<n;++i) a[i]=rng61();        for(int i=0;i<m;++i) cin >> b[i].fi,b[i].se=i;        sort(b,b+m);        b[m].fi=n;b[m].se=m;        for(int i=m-1;i>=0;--i)        {            if(b[i].fi==b[i+1].fi)            {                ans[b[i].se]=ans[b[i+1].se];                continue;            }            nth_element(a,a+b[i].fi,a+b[i+1].fi);            ans[b[i].se]=a[b[i].fi];        }        printf("Case #%d: ",T++);        for(int i=0;i<m;++i) cout << ans[i] << (i==m-1?'\n':' ');    }    return 0;}
原创粉丝点击