题目



分析

考虑 \(kruskal\) 的过程

我们选边从高位开始

当前位为 \(0\) 的放一边,为 \(1\) 的放另一边

将 \(0\) 的建一棵字典树, \(1\) 的匹配

因为是异或,那就走相同值的位,算能匹配到的最小值的个数

和与方案数都可以在这里计算

\(Code\)

#include<cstdio>
using namespace std;
typedef long long LL; const LL P = 1e9 + 7;
const int N = 100005;
int n , cnt , su , a[N] , c[N] , d[N] , ts[N * 30] , t[N * 30][2];
LL ans = 1; LL fpow(LL x , LL y)
{
LL res = 1;
while (y)
{
if (y & 1) res = res * x % P;
y >>= 1 , x = x * x % P;
}
return res;
} void insert(int x)
{
int u = 0 , ch;
for(register int i = 30; i >= 0; i--)
{
ch = (x >> i) & 1;
if (!t[u][ch]) t[u][ch] = ++cnt;
u = t[u][ch] , ts[u]++;
}
} int find(int x)
{
int u = 0 , ch , res = 0;
for(register int i = 30; i >= 0; i--)
{
ch = (x >> i) & 1;
if (t[u][ch]) u = t[u][ch];
else u = t[u][ch ^ 1] , res = res + (1 << i);
}
su = ts[u];
return res;
} LL solve(int l , int r , int w)
{
if (l >= r) return 0;
if (w == -1)
{
if (r - l - 1 > 0) ans = ans * fpow(r - l + 1 , r - l - 1) % P;
return 0;
}
int tl = 0 , tr = 0;
for(register int i = l; i <= r; i++)
if (a[i] & (1 << w)) d[++tr] = a[i];
else c[++tl] = a[i];
for(register int i = 1; i <= tl; i++) a[l + i - 1] = c[i];
for(register int i = 1; i <= tr; i++) a[l + tl - 1 + i] = d[i];
int tmp;
if (!tl || !tr) tmp = 0;
else
{
int num = 0 , f; tmp = 2147483647 , cnt = 0;
for(register int i = 1; i <= tl; i++) insert(c[i]);
for(register int i = 1; i <= tr; i++)
{
su = 0 , f = find(d[i]);
if (f < tmp) tmp = f , num = su;
else if (tmp == f) num += su;
}
ans = ans * num % P;
for(register int i = 0; i <= cnt; i++) ts[i] = t[i][0] = t[i][1] = 0;
}
return 1LL * tmp + solve(l , l + tl - 1 , w - 1) + solve(l + tl , r , w - 1);
} int main()
{
freopen("jst.in" , "r" , stdin);
freopen("jst.out" , "w" , stdout);
scanf("%d" , &n);
for(register int i = 1; i <= n; i++) scanf("%d" , &a[i]);
printf("%lld\n" , solve(1 , n , 30));
printf("%lld" , ans);
}

最新文章

  1. 一段能导致火狐、谷歌Safari浏览器崩溃,甚至让iPhone重启的代码
  2. mysql对比表结构对比同步,sqlyog架构同步工具
  3. D类 E类地址
  4. VSTO之旅系列(四):创建Word解决方案
  5. 从XML文件乱码问题,探寻其背后的原理(转)
  6. 【Spring 核心】AOP 面向切面编程
  7. Effective Java 第三版——14.考虑实现Comparable接口
  8. 安装node.js和npm
  9. ELK 经典用法—企业自定义日志手机切割和mysql模块
  10. Delphi下DLL编程知识(转)
  11. 安卓系统启动脚本init.rc说明文件readme.txt翻译
  12. 使用AOP AspectJ 定义@Before,@After ,@Aroud后 执行两次
  13. pycharm运行Django发生AppRegistryNotReady: Apps aren&#39;t loaded yet.
  14. python 小爬虫爬取博客文章初体验
  15. citySelect省市区jQuery联动插件
  16. spring mvc开发过程中的乱码问题
  17. Leetcode刷题记录:构建最大数二叉树
  18. BZOJ 1001: [BeiJing2006]狼抓兔子(s-t平面图+最短路求最小割)
  19. node和yarn
  20. jquery 配合 jsp 实现 ajax 要注意的问题

热门文章

  1. 记录一次PyQt5内存泄漏的问题解决
  2. GO开发工具litelDE的安装与使用
  3. Kafka教程(三):原理及存储
  4. 一图看懂Hadoop中的MapReduce与Spark的区别:从单机数据系统到分布式数据系统经历了哪些?
  5. Velero 系列文章(二):使用 Helm 安装 Velero
  6. 快速入门JavaScript编程语言
  7. markdown语法使用
  8. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法,你会有多牛逼-下篇
  9. 【运维笔录】局域网实现HTTPS访问,只需Nginx + mkcert
  10. CentOS7.6搭建Hadoop2.7.2运行环境-三节点集群模式