隐藏页面特效

3689: 异或之

3689: 异或之

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 262  Solved: 120
[Submit][Status][Discuss]

Description

给定n个非负整数A[1], A[2], ……, A[n]。
对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n-1)/2个新的数。求这些数(不包含A[i])中前k小的数。
注:xor对应于pascal中的“xor”,C++中的“^”。

Input

第一行2个正整数 n,k,如题所述。
以下n行,每行一个非负整数表示A[i]。

Output

 共一行k个数,表示前k小的数。

Sample Input

4 5
1
1
3
4

Sample Output

0 2 2 5 5

HINT

 

【样例解释】

1 xor 1 = 0 (A[1] xor A[2])

1 xor 3 = 2 (A[1] xor A[3])

1 xor 4 = 5 (A[1] xor A[4])

1 xor 3 = 2 (A[2] xor A[3])

1 xor 4 = 5 (A[2] xor A[4])

3 xor 4 = 7 (A[3] xor A[4])

前5小的数:0 2 2 5 5

【数据范围】

 对于100%的数据,2 <= n <= 100000; 1 <= k <= min{250000, n*(n-1)/2};

        0 <= A[i] < 2^31

 

Source

#include<cstdio> #include<queue> using namespace std; int read(){ register int x=0;bool f=1; register char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return f?x:-x; } const int N=1e5+10; struct node{ int a,v,k; bool operator <(const node &t)const{ return v>t.v; } }z; priority_queue<node>q; int n,m,K,cnt,a[N],siz[N*31],tr[N*31][2]; void ins(int x){ int now=0; for(int i=30;i>=0;i--){ int t=x&(1<<i);t>>=i; if(!tr[now][t]) tr[now][t]=++cnt; now=tr[now][t];siz[now]++; } } int query(int x,int k){ int now=0,ans=0; for(int i=30;i>=0;i--){ int t=x&(1<<i);t>>=i; if(siz[tr[now][t]]>=k) now=tr[now][t]; else k-=siz[tr[now][t]],now=tr[now][t^1],ans+=(1<<i); } return ans; } int main(){ n=read();K=read(); for(int i=1;i<=n;i++) a[i]=read(),ins(a[i]); for(int i=1;i<=n;i++){ z.v=query(z.a=a[i],z.k=2); q.push(z); } for(int i=1;i<2*K;i++){ z=q.top();q.pop(); if(i&1) printf("%d ",z.v); z.v=query(z.a,++z.k); q.push(z); } return 0; }

 


__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/6251640.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(392)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示