D-F

Posted on 2022-12-06 20:34  Capterlliar  阅读(86)  评论(0编辑  收藏  举报

D. Grid Xor

题意:有一原矩阵a,令a中每个元素为其相邻元素(共享一条边)的异或和,形成矩阵b。现给出矩阵b,求原矩阵a中所有数异或和。

解:异或的性质

已知a^b^c^b=a^c,也就是一个数在一个异或和中出现奇数次在最终答案中出现一次,出现偶数次会被抵消。那么就变成了给出一些格子的异或和,用这些格子拼出一个正方形。一排一排地拼,(用ps开两个图层)手玩一下会发现每次刚好能拼出两行,而题中n给的刚好是偶数,对上了。

E. Range = √Sum

题意:给定n,试构造一个长为n的序列,使得最大值与最小值差的平方恰为序列所有数之和。

解:从中间到两边,构造一些对称的东西

开始试图确定两边,然后往中间填数。进行一些暴力计算未果,决定换个思路。已知n2=n*n,试图构造n个n,并且其差为n。然后就很简单了,令l=n-n/2,r=n+n/2,分奇偶讨论即可。

F. Anti-Theft Road Planning

题意:给定n*n个点的方阵,相邻点之间建边,形成一张正方形网格状的图,沿某条路径从一个点到另一个点的花费为经过所有边权值的异或和。现在有一个人初始在(1,1),正在这张图上乱走,并不时通报当前花费;每通报一次,花费清零。要求构造一种给路径赋值的方案,使得给出任意花费,能唯一确定到达了哪个点,并且所有路径权值之和不超过48000.

解:格雷码

显然给每个点一个不同的编号,令两点之间路径为它们的异或值即可满足要求,但这么做不能保证权值和最小。要想路径权值和最小,也就是两两异或值要小,即两个数二进制表示下区别最小,可以用格雷码。但格雷码是一维的,需要乱搞一下。(打开题解)分奇偶位进行格雷码的构造,即对于第一行,格雷码原来是00, 01, 11, 10的,现在中间塞个0,变成0000, 0010, 1010, 1000;对于第一列,其奇数位形成格雷码;对于a[i][j],其编码为a[1][j] | a[i][1],即可完成拓展。(学会了,关闭题解)