D - 数列 XOR

https://atcoder.jp/contests/bitflyer2018-final-open/tasks/bitflyer2018_final_d

 

解説ACです。うーん難しい

 

 

問題:n個の整数列Aに操作を好きなだけしてBと一致させたい。可能か。

操作:隣り合う2つの片方に、もう一方をXORする

 

 

 

解説:

ある2要素を入れ替える。

足すことができる。

この2つのことから整数列をbitごとの行列にしてRankを求めて一致するか確かめればよい。

 

掃き出し法:

n個の要素について、1があるところを軸にする。(一番上のbitにしたけどどこでもよさそう)

 

同じbitに1があるほかの要素すべてにXORする(引く操作)

最後にソートすると整う。

 

 

 

足す操作でいいのかーと思いました。

結構非自明な感じがします。

bitごとの行列に帰着は典型っぽく見えますけど、類題とかあるんですかね。

なれるの厳しそうですね。