[CF1748F] Circular Xor Reversal
题目描述
You have an array $ a_0, a_1, \ldots, a_{n-1} $ of length $ n $ . Initially, $ a_i = 2^i $ for all $ 0 \le i \lt n $ . Note that array $ a $ is zero-indexed.
You want to reverse this array (that is, make $ a_i $ equal to $ 2^{n-1-i} $ for all $ 0 \le i \lt n $ ). To do this, you can perform the following operation no more than $ 250,000 $ times:
- Select an integer $ i $ ( $ 0 \le i \lt n $ ) and replace $ a_i $ by $ a_i \oplus a_{(i+1)\bmod n} $ .
Here, $ \oplus $ denotes the bitwise XOR operation.
Your task is to find any sequence of operations that will result in the array $ a $ being reversed. It can be shown that under the given constraints, a solution always exists.
输入格式
The first line contains a single integer $ n $ ( $ 2 \le n \le 400 $ ) — the length of the array $ a $ .
输出格式
On the first line print one integer $ k $ ( $ 0 \le k \le 250,000 $ ) — the number of operations performed.
On the second line print $ k $ integers $ i_1,i_2,\ldots,i_k $ ( $ 0 \le i_j \lt n $ ). Here, $ i_j $ should be the integer selected on the $ j $ -th operation.
Note that you don't need to minimize the number of operations.
样例 #1
样例输入 #1
2
样例输出 #1
3
1 0 1
样例 #2
样例输入 #2
3
样例输出 #2
9
1 0 1 0 2 1 0 1 0
提示
In the notes, the elements on which the operations are performed are colored red.
In the first test case, array $ a $ will change in the following way:
$ [1,\color{red}{2}] \rightarrow [\color{red}{1},3] \rightarrow [2,\color{red}{3}] \rightarrow [2,1] $ .
In the second test case, array $ a $ will change in the following way:
$ [1,\color{red}{2},4] \rightarrow [\color{red}{1},6,4] \rightarrow [7,\color{red}{6},4] \rightarrow [\color{red}{7},2,4] \rightarrow [5,2,\color{red}{4}] \rightarrow [5,\color{red}{2},1] \rightarrow [\color{red}{5},3,1] \rightarrow [6,\color{red}{3},1] \rightarrow [\color{red}{6},2,1] \rightarrow [4,2,1] $
交换两个数,有一个经典的通过异或达到的方式。相信各位卡常高手应该都知道。
x^=y
y^=x
x^=y
简写完后就是 x^=y^=x^=y
拆成二进制后,发现每个二进制位都交换了,所以两个数可以成功交换。
所以,要实现交换,只要想办法使一个数 \(a_x^=a_y\) 就行了。
经过一波尝试,有这样一种方法:
10000
01000
00100
00010
00001
先异或一波
10000
11000
01100
00110
00011
然后把要异或上那个数移过来
10000
11000
10100
00110
00011
10000
11000
10100
10010
00011
10000
11000
10100
10010
10001
然后上面两种操作全部进行逆操作,将一切都变回去,就成功让一个数异或上另一个数,且其他数不变。
但是写完后跑了 400 时,出来的次数是 400000。大概多了一倍吧。
仔细观察上面的过程,会发现让一个数异或上另一个数用了 4 轮此操作,但是有两次操作是废的。那么如果我们把第一次操作完后反复使用。由于我们是要 \(a_x\oplus =a_y\),\(a_{x+1}\oplus=a_{y-1}\),所以可以比如说这样。
100000
110000
011000
001100
000110
000011
100000
110000
101000
100100
100010
100001
100000
010000
011000
001100
000110
100001
100000
010000
011000
010100
010010
100001
100000
010000
010000
010100
010010
100001
这样子就可以把常数除以2.
#include<cstdio>
const int N=405,M=3e5+5;
int n,m,st[M],k;
void run(int l,int r)
{
if(l>=r||l+1==r)
return;
for(int i=r-2;i>=l;i--)
st[++m]=i%n;
for(int i=l+1;i<r;i++)
st[++m]=i%n;
run(l+1,r-1);
}
void todo(int l,int r)
{
for(int i=l;i<r;i++)
st[++m]=i%n;
}
int main()
{
scanf("%d",&n);
k=n-2>>1;
todo(0,n-1);
run(0,n-1);
todo(n-1-k,n+k);
run(n-1-k,n+k);
todo(0,n-1);
run(0,n-1);
printf("%d\n",m);
for(int i=1;i<=m;i++)
printf("%d ",st[i]);
return 0;
}
[CF1748F] Circular Xor Reversal的更多相关文章
- 如何在Spring MVC Test中避免”Circular view path” 异常
1. 问题的现象 比如在webConfig中定义了一个viewResolver public class WebConfig extends WebMvcConfigurerAdapter { //配 ...
- [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...
- Circular Buffer
From:http://bradforj287.blogspot.com/2010/11/efficient-circular-buffer-in-java.html import java.util ...
- 二分+DP+Trie HDOJ 5715 XOR 游戏
题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 在.NET Core中遭遇循环依赖问题"A circular dependency was detected"
今天在将一个项目迁移至ASP.NET Core的过程中遭遇一个循环依赖问题,错误信息如下: A circular dependency was detected for the service of ...
- BZOJ 2115 【Wc2011】 Xor
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
- xor和gates的专杀脚本
前段时间的一次样本,需要给出专杀,应急中遇到的是linux中比较常见的两个家族gates和xor. 首先是xor的专杀脚本,xor样本查杀的时候需要注意的是样本的主进程和子进程相互保护(详见之前的xo ...
- Codeforces617 E . XOR and Favorite Number(莫队算法)
XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...
- Xor && 线性基练习
#include <cstdio> #include <cstring> ; ; int cnt,Ans,b,x,n; inline int Max(int x,int y) ...
- BC之Claris and XOR
http://acm.hdu.edu.cn/showproblem.php?pid=5661 Claris and XOR Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- Mybatis插件功能
1 插件的作用 在Mybatis执行SQL的生命周期中,会使用插件进行埋点,主要包括Executor.StatementHandler.ParameterHandler和ResultSetHandle ...
- 《SQL与数据库基础》15. 触发器
目录 触发器 语法 示例-insert型触发器 示例-update型触发器 示例-delete型触发器 本文以 MySQL 为例 触发器 触发器是与表有关的数据库对象,指在 insert/update ...
- QA|如何获取元素属性值|网页计算器自动化测试实战
一般来说 类似于<value>123</value>这样的元素,我们获取元素值是用.text获取,但有时这个值不是写在这里,而是作为标签的属性值写进去的,此时我们就需要获取属性 ...
- 《Python魔法大冒险》010 魔法宝箱:列表与元组的探险
城堡的大门 随着小鱼和魔法师的深入,他们来到了一个古老的废弃城堡.城堡的大门上挂着一个巨大的锁,而锁的旁边有一排小抽屉,每个抽屉里都有一个物品. 魔法师对小鱼说:"这是一个古老的魔法宝箱,小 ...
- Android 编译介绍
一.需求 Android的源码非常的庞大,编译Android系统往往会占用我们很长的时间,我们需要了解下Android的编译规则,以期能提高我们的开发效率,达到程序员按时下班的伟大理想. 二.环境 平 ...
- Solution -「洛谷 P3773」「CTSC 2017」吉夫特
Description Link. 求满足 \[\prod _{i=2}^{k} \binom{a_{b_{i-1}}}{a_{b_i}} \mod 2 = \binom{a_{b_1}}{a_{b_ ...
- Linux下jdk配置
1.首先执行以下命令查看可安装的jdk版本: yum -y list java* 执行成功后可看到如下界面: 2.选择自己需要的jdk版本进行安装,比如这里安装1.8,执行以下命令: yum in ...
- ReactPortals传送门
ReactPortals传送门 React Portals提供了一种将子节点渲染到父组件以外的DOM节点的解决方案,即允许将JSX作为children渲染至DOM的不同部分,最常见用例是子组件需要从视 ...
- 文心一言 VS 讯飞星火 VS chatgpt (103)-- 算法导论10.1 1题
一.用go语言,仿照图 10-1,画图表示依次执行操作 PUSH(S,4).PUSH(S,1).PUSH(S,3).POP(S).PUSH(S,8)和 POP(S)每一步的结果,栈 S初始为空,存储于 ...
- 背景图片随机API
在美化博客园的时候,遇到了一个问题:博客背景图片只支持一张图片,看到有道友说可以用API随机图片. 于是就有了这篇文章. 本文主要整理了一些随机图片API,希望对你有帮助. 岁月小筑 https:// ...