【Codeforces241B】Friends
来源:互联网 发布:5230软件下载 编辑:程序博客网 时间:2024/06/02 07:31
题意:
给你
在Trie上dp应该就好了。
#include <bits/stdc++.h>#define gc getchar()#define ll long long#define N 50009#define T 31#define mod 1000000007#define inv2 ((mod+1)/2)using namespace std;int n,m,sum[N][T];unsigned limit,a[N],number;struct Trie{ int size[N*T],root,ch[N*T][2],cnt,pos[N]; unsigned S; void init() { root=cnt=1; } void ins(int x) { int now=root; for (int i=T-1;i>=0;i--) { size[now]++; int c=x>>i&1; if (!ch[now][c]) ch[now][c]=++cnt; now=ch[now][c]; } size[now]++; } void work() { for (int i=1;i<=n;i++) pos[i]=root; number=limit=0; for (int i=T-1;i>=0;i--) { S=0; for (int j=1;j<=n;j++) S+=size[ch[pos[j]][!((limit^a[j])>>i&1)]]; if (S+number<=m*2) number+=S; else limit^=1<<i; for (int j=1;j<=n;j++) pos[j]=ch[pos[j]][(limit^a[j])>>i&1]; } number/=2; } int calc(int ret=0) { for (int i=1;i<=n;i++) for (int j=0;j<T;j++) if (!(limit>>j&1)) { unsigned Min=a[i]^(limit|(1<<j)); Min&=~0<<j; int l=lower_bound(a+1,a+n+1,Min)-a; int r=lower_bound(a+1,a+n+1,Min+(1<<j))-a; ret=(ret+(ll)((limit|(1<<j))&(~0<<j))%mod*(r-l)%mod)%mod; for (int k=0;k<j;k++) { int num=sum[r-1][k]-sum[l-1][k]; if (a[i]>>k&1) num=r-l-num; ret=(ret+(ll)num*((1<<k)%mod)%mod)%mod; } } return (ll)ret*inv2%mod; }}trie;int read(){ int x=1; char ch; while (ch=gc,ch<'0'||ch>'9') if (ch=='-') x=-1; int s=ch-'0'; while (ch=gc,ch>='0'&&ch<='9') s=s*10ll+ch-'0'; return s*x;}int main(){ trie.init(); n=read(),m=read(); for (int i=1;i<=n;i++) trie.ins(a[i]=read()); if (m==0) { puts("0"); return 0; } sort(a+1,a+n+1); for (int i=0;i<T;i++) sum[0][i]=0; for (int i=1;i<=n;i++) for (int j=0;j<T;j++) sum[i][j]=sum[i-1][j]+(a[i]>>j&1); trie.work(); printf("%d\n",(trie.calc()+(ll)(m-number)*(limit%mod)%mod)%mod); return 0;}
阅读全文
0 0
- 【Codeforces241B】Friends
- friends
- friends.....
- Friends
- Friends
- Friends
- friends
- friends
- Friends
- Friends
- friends
- friends
- Friends
- Friends
- Friends
- Friends' Friends
- apache friends
- four friends
- github的使用
- 点击屏幕隐藏键盘
- 将Python脚本打包成可执行文件
- 网页视频播放代码
- JDBC连接MySQl数据库方法
- 【Codeforces241B】Friends
- DataBinding的基本使用
- HTML5:学习(6)Bootstrap框架
- 数据算法-hadoop2 二次排序
- Cmder中文显示不正常解决办法
- 自定义seekbar
- spring 定时器配置
- IOS11更新教程大分享(附带降级教程)
- (二) Spring项目的搭建