ABC197 C - ORXOR
誤読抜きにしても、BIT全探索の理解が甘く、まるで解けなかった・・・
だいぶ時間かかって、やっと分かり易いコードに落ちた気がするので、メモ。
なお、PyPyじゃないと通らない(500msくらい)
def resolve(): N=int(input()) A=list(map(int,input().split())) Min=10**100 n=N #値0,1,2,3に対して0,1,2の区切りを入れる全パターン列挙 #区間内が空は許されないので、区切りは0の後、1の後...と捉える pattern=[] for i in range(2 ** (n-1)): tmp = [False] * (n-1) for j in range(n-1): if i >> j & 1: tmp[j] = True pattern.append(tmp) #各パターンに対し計算する for ptn in pattern: ORs=[]#区切り内でORした値集 XOR=0 ORtemp=A[0] for i in range(n-1): if ptn[i]: ORs.append(ORtemp) ORtemp=A[i+1] else: ORtemp|=A[i+1] ORs.append(ORtemp) #区切ったOR集が完成するので、それぞれXOR for ors in ORs: XOR^=ors Min=min(Min,XOR) print(Min)