题目

给出一个长度为2^M的排列,元素分别是0, 1, 2, ... , 2^M -1。 选择其中某个非空连续子序列,然后允许交换这个排列中某两个不同的数,然后使得这个连续子序列的所有数的按位异或(bitwise XOR)的结果恰好等于2^M-1 求:有多少个连续子序列满足上述条件。

Hint

\(m\leq20\)

简化题意 设a[i]表示0~i的\(b_i\)异或和.求有多少个l,r满足a[l-1]^a[r]maxx/a[l-1]^a[r]^b[A]^b[B]maxx 其中maxx=2^M-1;

当然A和B一个在l~r之中一个不在 都在或都不在可以转换为上述情况。

左边很好求出 直接上Trie树即可,关键是右边。先考虑暴力的想法 设C=a[l-1]^a[r] C^maxx=b[A]^b[B].

C^maxx此时为定值 对于l~r之中每一个\(b_i,i\in (l,r)\) 都必然存在且只存在一个位置K满足\(b_i\)^\(b_K\)=C^maxx;

所以我们只需要找到一个位置i 使得位置K在(l,r)的外 即可判定l 和 r是合法的。

这个东西我们发现可以\(n^3\)的暴力了 发现我们优化不了这个东西。不妨补集转换。

求出 有多少l r是不合法的 即求出除了不满足第一种情况外也不满足第二种情况。

对于第二种情况 对于每一个位置i 其位置K都在集合之内。

由于每个i都仅对应一个K 所以当区间为奇数的时候是必然满足条件的。

讨论 区间为偶数的时候 匹配后奇数对一定不存在 如 2 6 他们如果可以成功配对 且配对数字为w C^maxx=w 且C=w maxx=0 故这种情况不存在。

考虑区间为4的倍数且两两配对的情况 可以发现此时w为定值maxx 所以对于每一个i来说我们都已经知道其配对位置在哪了。

问题也就转换成如何快速求出一个序列 每个数字都出现了两次 要求复杂度O(1) 本着异或的思想我们可以取异或前缀和判断 但是这样会误判

所以有一个非常经典的做法 给每个值都随便赋值 然后 再异或可以大大减小这种碰撞概率(双模双hash 这样稳一点。

关于这道题的线段树做法 我不会怎么扫描线能把这个东西扫出来 还是使用hash吧 舒服一点。。

const int MAXN=1100000;
int n,m;
int a[MAXN],pos[MAXN];
int w[MAXN][2];
map<pair<int,int>,int>H[4];
int main()
{
freopen("1.in","r",stdin);
srand(time(0));
get(m);n=(1<<m)-1;
if(m==1){puts("2");return 0;}
for(int i=1;i<=n+1;++i)get(a[i]),pos[a[i]]=i;
for(int i=0;i<=n/2;++i)
{
w[pos[i^n]][0]=w[pos[i]][0]=rand()<<15|rand();
w[pos[i^n]][1]=w[pos[i]][1]=rand()<<15|rand();
}
ll ans=(ll)(n+1)*(n+2)/2;
H[0][mk(0,0)]=1;
for(int i=1;i<=n+1;++i)
{
w[i][0]^=w[i-1][0];
w[i][1]^=w[i-1][1];
ans-=H[i%4][mk(w[i][0],w[i][1])];
++H[i%4][mk(w[i][0],w[i][1])];
}
printf("%lld\n",ans);
return 0;
}

luogu4443 coci 2017 Dajave的更多相关文章

  1. [SinGuLaRiTy] COCI 2016~2017 #5

    [SinGuLaRiTy-1012] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 最近神犇喜欢考COCI...... 测试题目 对于所有的 ...

  2. @COCI 2016/2017 Round 3@ Meksikanac

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 在平面直角坐标系中,给定一个左下角为 (0, 0),右上角为 ( ...

  3. [SinGuLaRiTy] COCI 2011~2012 #2

    [SinGuLaRiTy-1008] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 测试题目 对于所有的题目:Time Limit:1s   ...

  4. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  5. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  6. iOS的ATS配置 - 2017年前ATS规定的适配

    苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...

  7. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

  8. Xamarin+Prism开发详解三:Visual studio 2017 RC初体验

    Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...

  9. Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo

    目录: 0. 前言 1. 在线安装器 2. 安装VS 3. HelloWorld 4. ASP.NET MVC 5. 软件下载 6. 结尾 0. 前言: 工作原因,上下班背着我的雷神,一个月瘦了10斤 ...

随机推荐

  1. 武科WUST-CTF2020“Tiki组 ”

    赛事信息 官网地址:https://ctfgame.w-ais.cn/参赛地址:https://ctfgame.w-ais.cn/起止时间:2020-03-27 18:00:00 - 2020-03- ...

  2. 06 Vue生命周期钩子

    生命周期钩子 表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数 钩子函数: 满足特点条件被回调的方法 new Vue({ el: "#app" ...

  3. python 网络爬虫报错“UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position”解决方案

    Python3.x爬虫, 发现报错“UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1:invalid sta ...

  4. flask 源码专题(二):请求上下文与全文上下文

    源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ...

  5. 访问控制列表与SSH结合使用,为网络设备保驾护航,提高安全性

    通过之前的文章简单介绍了华为交换机如何配置SSH远程登录,在一些工作场景,需要特定的IP地址段能够SSH远程访问和管理网络设备,这样又需要怎么配置呢?下面通过一个简单的案例带着大家去了解一下. 要实现 ...

  6. JavaScript图形实例:阿基米德螺线

    1.阿基米德螺线 阿基米德螺线亦称“等速螺线”.当一点P沿动射线OP以等速率运动的同时,该射线又以等角速度绕点O旋转,点P的轨迹称为“阿基米德螺线”. 阿基米德螺线的笛卡尔坐标方程式为: r=10*( ...

  7. 问题:IE11下window.history.go(-1)返回404

    解决方法: 在后面添加return false,如: onclick="javascript:window.history.go(-1);return false" 这个问题在IE ...

  8. 第六章:Android的Drawable

    Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念. 6.1 Drawable简介 Drawable常被用来作为View的背景使用. Drawable一般都是通过XML来定义的. D ...

  9. Java顺序查找、二分查找

    Java顺序查找.二分查找   查找算法中顺序查找算是最简单的了,无论是有序的还是无序的都可以,只需要一个个对比即可,但其实效率很低. 顺序查找 动图演示 详细代码 // 顺序查找 public st ...

  10. Spring当中循环依赖很少有人讲,今天一起来学习!

    网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图.流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去 ...