Codeforces Round #730 (Div. 2)

题意:

t组数据,每组给一个n和k,(easy version里面k=2) 每一次系统会输入一个初始的密码(初始密码是一个在[0,n−1][0,n-1][0,n−1]的随机值),你可以最多输出n次询问,如果猜对了密码系统会输入1,否则输入0.但密码不是不变的,每次会根据如下公式变化
旧密码⨁新密码=询问值旧密码\bigoplus新密码=询问值 旧密码⨁新密码=询问值

题解:

设初始密码为X,第i次询问值为PiP_iPi​,新密码为Y

根据异或的交换律得到
旧密码⨁新密码=询问值→旧密码⨁询问值=新密码→X⨁Pi=Y旧密码\bigoplus新密码=询问值\to 旧密码\bigoplus询问值=新密码\to X\bigoplus P_i=Y 旧密码⨁新密码=询问值→旧密码⨁询问值=新密码→X⨁Pi​=Y
根据异或的结合律
(((X⨁P1)⨁P2)⨁...Pi)=X⨁(P1⨁P2⨁...Pi)(((X\bigoplus P_1) \bigoplus P_2 )\bigoplus ... P_i)=X\bigoplus (P_1 \bigoplus P_2 \bigoplus ... P_i) (((X⨁P1​)⨁P2​)⨁...Pi​)=X⨁(P1​⨁P2​⨁...Pi​)
所以可以把初始密码每次异或一个询问值得到一个新密码简化为是在异或了一堆询问值后得到一个新密码.

现在我们假设Pi=(i−1)⨁P1⨁P2⨁...Pi−1P_i=(i-1)\bigoplus P_1 \bigoplus P_2 \bigoplus ... P_{i-1}Pi​=(i−1)⨁P1​⨁P2​⨁...Pi−1​

可以得到
PX+1=X⨁(P1⨁P2⨁...Pi⨁...PX)P_{X+1}=X\bigoplus (P_1 \bigoplus P_2 \bigoplus ... P_i\bigoplus... P_{X}) PX+1​=X⨁(P1​⨁P2​⨁...Pi​⨁...PX​)
我们惊奇的发现初始密码X异或上前X个询问的值就是
X⨁(P1⨁P2⨁...Pi⨁...PX)X\bigoplus (P_1 \bigoplus P_2 \bigoplus ... P_i\bigoplus... P_{X}) X⨁(P1​⨁P2​⨁...Pi​⨁...PX​)
所以询问到第X+1次时其询问值一定等于当前密码的值

还可以想到另一种
P1=0Pi=(i−1)⨁(i−2)2<=i<=nP_1=0\\P_i=(i-1)\bigoplus(i-2) \ 2<=i<=n P1​=0Pi​=(i−1)⨁(i−2) 2<=i<=n
因为
第X+1次询问:PX+1=X⨁(X−1)而初始密码在经过X次询问等于X⨁(0⨁1⨁2⨁1⨁3⨁2⨁...X−1⨁X−2)→X⨁(X−1)第X+1次询问:P_{X+1}=X\bigoplus(X-1)\\ 而初始密码在经过X次询问等于X\bigoplus(0\bigoplus1\bigoplus 2\bigoplus1\bigoplus3\bigoplus2\bigoplus...X-1\bigoplus X-2)\to X\bigoplus(X-1) 第X+1次询问:PX+1​=X⨁(X−1)而初始密码在经过X次询问等于X⨁(0⨁1⨁2⨁1⨁3⨁2⨁...X−1⨁X−2)→X⨁(X−1)
所以询问到第X+1次也可以得到当前密码值

代码:

#include<iostream>
#include<cmath>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
inline ll read();
int main() {int t = 1;cin >> t;while (t--) {int n, k;cin >> n >> k;for (int i = 1; i <= n; i++) {if (i == 1)cout << 0 << '\n';else{cout<<((i-1)^(i-2))<<'\n';}int res;cin >> res;if (res == 1)break;}}return 0;
}inline ll read() {char ch = getchar();ll p = 1, data = 0;while (ch < '0' || ch > '9') {if (ch == '-')p = -1;ch = getchar();}while (ch >= '0' && ch <= '9') {data = data * 10 + (ch ^ 48);ch = getchar();}return p * data;
}

CodeForces Round #730 D1. RPD and Rap Sheet (Easy Version)题解相关推荐

  1. Codeforces Round #730 (Div. 2) D1. RPD and Rap Sheet (Easy Version)

    传送门 思路: 假设0到n-1之间的数为密码,则可以想到一个可行的解法: 第一次输出0,之后的每一次都输出(i−1)⊕(i−2)(i-1)⊕(i-2)(i−1)⊕(i−2). 假设答案为x,那么第一次 ...

  2. D1. RPD and Rap Sheet (Easy Version) (交互题+构造)

    题意: 交互题,有一个初始密码xxx,只有nnn次猜测机会,假如猜了yyy,x!=yx!=yx!=y,那么密码就会变成x⨁yx\bigoplus yx⨁y. 题解: 设第iii次猜测的数为pip_ip ...

  3. CodeForces - 1543D1 RPD and Rap Sheet (Easy Version)(异或+交互)

    题目链接:点击查看 题目大意:交互题猜密码,设原密码为 xxx,猜的密码为 yyy,如果没猜到,密码会自适应变成 zzz,满足 x⊕z=yx \oplus z=yx⊕z=y ,最多猜 nnn 次 题目 ...

  4. Codeforces Round #730 (Div. 2) D2. RPD and Rap Sheet (Hard Version) 交互 + k进制的转换

    传送门 文章目录 题意: 思路: 题意: 定义a⊕kba\oplus_k ba⊕k​b为a,ba,ba,b在kkk进制下的不进位加法.系统会随机生成一个数xxx,你猜这个数,假设当前猜的数为yyy,如 ...

  5. CodeForces - 1543D2 RPD and Rap Sheet (Hard Version)(交互+模拟)

    题目链接:点击查看 题目大意:交互题猜密码,设原密码为 xxx,猜的密码为 yyy,如果没猜到,密码会自适应变成 zzz,满足 x⊕z=yx \oplus z=yx⊕z=y ,最多猜 nnn 次,对于 ...

  6. Codeforces Round #828 (Div. 3) E1. Divisible Numbers (easy version) 解题报告

    原题链接: Problem - E1 - Codeforces 题目描述: This is an easy version of the problem. The only difference be ...

  7. RPD and Rap Sheet (Hard Version)(交互题,不进位加法、不退位减法)

    传送门 题目: 定义 a⊕kba \oplus_k ba⊕k​b表示整数 aaa 与 bbb的在 kkk进制下的不进位加法.特别的,当 k=2k = 2k=2 时,这一操作可以称为位运算的异或. 给定 ...

  8. Codeforces Round #560 (Div. 3)F1.F2. Microtransactions (easy version)

    题目来源: F1:https://codeforces.com/contest/1165/problem/F1 F2:https://codeforces.com/contest/1165/probl ...

  9. Codeforces Round #658 (Div. 1) A2. Prefix Flip (Hard Version)

    Codeforces Round #658 (Div. 1) A2. Prefix Flip (Hard Version) 题目链接 There are two binary strings a an ...

最新文章

  1. 数据通信技术(三:VLAN划分)
  2. 联结你与万物的8种元素
  3. Windows Server 2008壮烈牺牲
  4. ios html cookies,iOS-WKWebView携带cookie发送http请求,cookie失效
  5. ES6 模块化的基本语法——默认导出 与 默认导入、按需导出 与 按需导入、直接导入并执行模块代码
  6. Eclipse+pyDev进行Python环境的搭建
  7. 借钱不还,法院可以单方拍卖房产吗?
  8. 使用JDK 8轻松进行细粒度排序
  9. java不要在常量和变量中出现易混淆的字母
  10. Python bytes 和 string 相互转换 - Python零基础入门教程
  11. python3 列表相关操作
  12. 是的,我不做技术经理了
  13. ip地址互转十进制数字(函数)
  14. java 短链接url_Java 网址短链接服务原理及解决方案
  15. 前端json文件模拟数据与后台交互
  16. 基于射频技术的门禁管理系统
  17. 7大Python IDE工具推荐
  18. 基于php+MySQL电脑外设商城网站毕业设计源码271538
  19. Go 语言之 go-app
  20. 电机加减速S曲线算法 Sigmoid 函数

热门文章

  1. 经典ERP(家庭版)
  2. 电脑维修入门:电脑故障排除的十种方法!
  3. PS-InSAR 和 和 SBAS-InSAR 方法对比
  4. ABAP-信息结构S901/S902程序问题
  5. WindowsMobile应该如何发展?-2(未完待续)
  6. 网站实现QQ第三方登录详细步骤
  7. 如何用eclipse将本地项目上传至github
  8. 当XP提示30天期限需要激活时使用以下方法
  9. 计算机维护和维修的注意事项,计算机维修与维护大纲.doc
  10. 秒杀理解Kafka原理