CF768C题解

题面

Description:
有一个长度为 \(n(1\leq n\leq10^5)\) 的数组 \(a(0\leq a_i\leq 1000)\),你要进行 \(k(0\leq k\leq10^5)\) 次操作:

  • 将数组排序;
  • 将数组中下标为奇数的数字异或 \(x(0\leq x\leq1000)\)

问操作完毕后数组中最大值和最小值。


重在乱搞。
随便手造了几组小数据,发现都在若干步之后进入了循环。所以我们大胆猜测:对于所有数据,一定会进入循环。
不知道怎么证明,但是因为通过了,所以这个猜测是正确的。
后面就全是暴力了。暴力做每一步,做完以后哈希,每次判断是否与之前某一位的哈希值相等即可。如果相等了,说明陷入了循环。算一下循环节就知道 \(k\) 对应循环中的哪一位。
似乎不用哈希也能过?但是用了的话匹配会快很多,也省空间。
注意 \(k=0\) 的数据。

代码

posted @ 2022-05-20 16:09  1358id  阅读(24)  评论(0编辑  收藏  举报