【题解】牛牛大侦探
题意
给定一个由加减和异或构成的函数,给你这个函数的返回值,求原输入值是多少。
题解
由于该函数只由加减和异或构成。而异或操作是满足可逆性的,即a^b^b=a。所以从该函数的末尾重新一个一个值进行异或回去,异或完了,原来需要做加法的地方,那么我们做减法,原来需要做减法的地方再做加法,就可以实现从返回值逆推出原值了。
复杂度
时间复杂度
空间复杂度
代码
#include<bits/stdc++.h> using namespace std; int rev_func(int n) { return ((((((((((((((((((((((n^0x2012CCDB)+449212884)^0x6B86ECF5) +1817072919)^0xE1EECD69) -961945065+359192087)^0xE6E03877) -1067946459)^0xD0150EAD) +9365053)^0x3D5082FE) -648671421+1347645151)^0xB6F70BF8) +57802472)^0x5D1F4C6) +1352480098)^0xF78063EF) +548738866)^0x9F14CFD7) -647103529)^0xB168C552)-17062705); } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); printf("%d\n",rev_func(n)); } return 0; }