題意
這題可以用搜索,但是肯定會超時,畢竟最多100盞燈,10000次按壓。這些可不是小數目,不過我們可以知道,對于每一盞燈,按壓兩次的效果和不按壓的效果是一樣的。這樣一共才四盞燈,也就是我們只要枚舉16種情況就OK了。當然達到目標狀態后,我們還得看剩下的次數能否是燈的狀態不發生改變。通過觀察發現,可以沒盞燈兩次所有的燈的狀態不發生改變,還有就是可以改變1,2,3這三盞燈,所有燈的狀態也不會發生改變。然后我們看剩下的燈是不是可以由n個2和m個3(n,m可以為0)相加得到。如果可以的話,那么這個狀態就可以,記錄下來。最后我們要先排序,由于qsort函數對二維數組排序不熟,所有采用的是冒泡排序,不過這最多也就是16個元素,所以還是很快的。
看了Analysis之后發現可以簡化到只考慮前6盞燈,因為LCM(1,2,2,3)=6.也就是開關1影響的是每次加1的燈,相應的2 2 3.所以超過6的都可以由前6盞燈得到。這樣的話應該還可以把6位二進制轉化成10進制然后用qsort快排一下。輸出也好辦,一般循環輸出前6種狀態直到輸出n位為止。
相應的可以看nocow上的題解