Yet Another Problem

最爱丁珰發表於2024-07-22

遇到連續段的異或和,考慮字首異或和

對區間\([l,r]\),觀察實施一次操作\([L,R]\)後,區間會變成什麼樣。不難發現,\([L,R]\)的異或字首和會變成\([sum_R,sum_{L-1},sum_R,...,sum_{L-1},sum_R]\),於是可以知道,如果\(sum_R≠sum_{L-1}\),就無解;如果\([l,r]\)的長度為奇數,操作一次整個區間就可以了,答案為\(1\),如果為偶數,我們嘗試轉換為前面一種情況,於是如果\(sum_l=sum_r\)或者\(sum_{r-1}=sum_r\),那麼就可以像前面一樣操作,答案為\(1\),否則的話,此時我們看樣例,就會發現,如果我們在\([l,r]\)中找到一個奇數位\(i\)(注意這裡的奇數位是相對於\(l\)而言的,如果\(l\)是奇,那麼奇數位指下標為奇數,否則指下標為偶數),使得\(sum_i=sum_r\),此時操作兩次就可以了,其餘情況無解(證:此時可以用數學歸納法證明,無論怎麼改變,\([l,r]\)中的奇數位都不可能等於\(sum_r\),而最終序列的所有異或字首和一定都為\(sum_r\)的)

相關文章