@yang12138
2019-06-05T17:19:52.000000Z
字数 2428
阅读 1086
未分类
D: Ehab and the Expected XOR Problem
链接:http://codeforces.com/contest/1174/problem/D
题意:给定正整数,构造一个数列使得:且所有区间异或和的集合不包含和,同时最大。
假设对数列求前缀异或和得到,题意的要求可以转换成:不存在且不存在,其中。
容易知道从前缀异或和可以转换得到,接下来求。
首先,而且。
1、如果,那么对每个数来说,唯一存在一个使得,而且是成对的,也就是在这个数中,有对数,每对数只能取一个。所以最后会有个数。
2、如果,那么对每个数,都不存在使得,这样的话是一个可行解。
对倒过来异或一次就可以得到了。
E: Ehab and the Expected GCD Problem
链接:http://codeforces.com/contest/1174/problem/E
题意:是一个的全排列,定义为的前缀的不同数的个数,求使取得最大值的的个数。
假设,其中是互不相同的质数,那么这个排列能取到的最大的是,所以全部排列取得的最大值就是分解质因数后质数个数的和,显然能让质数个数最大,其次,如果,那么也能作为一个合格的,的取值只有以上两种可能。
定义表示,前个数的前缀是,使全部前缀个数最多的全排列个数,那么转移有三种:
1、如果,表示转移到前个数前缀仍为的情况,可以取的数有个。
2、如果,表示转移到前个数前缀为的情况,可以取的数有个。
3、如果,表示转移到前个数前缀为的情况,可以取的数有个。
初始条件是。
如果,那么是答案。
如果,那么是答案。
F: Ehab and the Big Finale
链接:http://codeforces.com/contest/1174/problem/F
题意:交互题,给定一颗有根树,根节点是。数据选定了一个节点,要通过询问得到这个节点,询问最多次,有以下两种询问:
1、d u
,后台程序会返回和的距离。
2、s u
,后台程序会返回到的路径上的第二个节点,询问的前提条件是是的祖先,如果不符合该条件,直接。
先以为根做一个,记录所有节点的深度(的深度是),然后询问d 1
,可以知道在这颗树上的深度。再以为根一次,记录表示以为根节点的子树中深度为的节点的个数,记录表示的子节点中最大的节点。
记录表示节点沿下降次之后的节点。
记录表示节点沿父亲上升次之后的节点。
假设当前在树上的节点,要求的在为根的子树上。
1、如果,那么显然。
2、询问d down(u,D-dep(u))
,得到的结果记录为,那么可以肯定在以为根的子树上,递归计算。
3、特别的,如果,那么说明不在的子树中,询问s u
,记录返回值为,递归计算。
最大的询问次数可以用计算树链剖分复杂度的方法计算,假设到路径经过了条重链,那么最多询问次,。