日常一道算法题。端详了这道题一个小时,然后找了好一会儿规律,结果发现居然是暴力题。
翻译
Johnny 和他的爱好
Johnny 有很多爱好,其中有两个看起来是无害的:按位运算和偷偷溜进父亲的办公室。就像别的小孩子一样,他组合了这两个爱好,带来了一些麻烦。
他父亲桌上有一个集合 S 包含了许多重要的数字。Johnny 有了一个好主意,挑选一个正整数 k 与 S 内的每个数字异或操作,然后替换原值。
帮助他找到最小的可以替换完让父亲发现不了的 k。
输入格式
输入整数 t 表示测试用例组数。
每个测试用例,第一行输入整数 n 表示 S 内数字的个数。第二行输入 n 个不同的整数,用空格分隔。
可以保证 n 的和不大于 1024。
输出格式
输出最小的整数 k,或者 -1。
分析
从 1 - 1024 遍历每个数字,与数组中的1024 个数字比较,然后将结果排序,与原数组比较,看看是否完全一致。
代码(Python3)
# https://codeforces.com/problemset/problem/1362/B
import sys
import os
import heapq
import math
try:
path = "./file/input.txt"
if os.path.exists(path):
sys.stdin = open(path, 'r')
# sys.stdout = open(r"./file/output.txt", 'w')
except:
pass
t = int(input())
def printd(value):
# print(value)
pass
def case():
n = int(input())
arr = list(map(int, input().split(" ")))
answer = -1
arr.sort()
for index in range(1, 1025):
result = []
for number in arr:
result.append(number ^ index)
result.sort()
isSame = True
for i in range(n):
if arr[i] != result[i]:
isSame = False
if isSame:
answer = index
break
print(answer)
for _ in range(t):
case()
更多代码尽在 https://github.com/Tconan99/Codeforces
by 费城的二鹏 2020.06.11 长春
网友评论