range_xor

ファイル case(N=1000).txt が与えられ、数列の要素 a_i をいくつか min(a_i, 1000 - a_i) で置き換えて全要素のxorを最小にするとき、置き換えた結果の数列の種類数を 10^9+7 で割った余りを要求された。

[今見ている要素][これまでのxorの結果] を状態としてメモ化探索を行い、まずxorの結果の最小値を求め、続いてその最小値になる数列の種類数を求めるプログラムを作成した。
このプログラムに case(N=1000).txt の内容を入力として与えることで、flagが得られた。

A file case(N=1000).txt was given, and the number of sequence that can be obtained by replacing some elements a_i with min(a_i, 1000 - a_i) to minimize xor of all elements was asked. (The number modulo 10^9+7 should be answered)

I wrote a program to perform search with memoization using status [the position of the element looking at][result of xor so far] to firstly obtain the minimum value of xor, and then obtain the number of sequences to achieve the value.
I obtained the flag by feeding the content of the file case(N=1000).txt as the input to this program.

solve.c

FLAG{461905191}

WaniCTF 2023