专栏文章
题解:P10818 [EC Final 2020] Random Shuffle
P10818题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mio8g6bw
- 此快照首次捕获于
- 2025/12/02 15:04 3 个月前
- 此快照最后确认于
- 2025/12/02 15:04 3 个月前
不妨设 在经过 次变换后得到的数值为 ,那么显然问题就是变成了给出 个同余方程,第 个方程的形式为 ,其中 表示第一个循环中与 交换的位置。
是容易线性求解的,那么问题就在于 。如果是一般的问题的话,肯定是考虑把 表示成关于 的多项式函数。但是这里涉及到二进制操作,所以不太能表示成多项式函数。
同时,还是由于涉及到二进制操作,所以可以尝试用暴力的方式。用 bitset 模拟左移和右移的过程,或者不用 bitset 也没问题,就是访问每一位会稍微麻烦一点。这样就可以得到
rand() 所对应的变换矩阵,可以据此列出异或的线性方程,然后考虑直接搜索或高斯消元。问题就在于为什么是正确的。注意到对于每个 都是可以列出一个方程的,所以实际上解不出来的元只有 个,注意到高斯消元的复杂度是可以接受的,但是搜索由于限制了 的范围,造成搜索的复杂度也不会太高,然后就没问题了。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...