量子糾纏

發布時間: June 27, 2024, 7:50 p.m.   最後更新時間: June 28, 2024, 7:49 a.m.   時間限制: 3000ms   記憶體限制: 128M

給定一個長度為$n$的正整數序列$<a>:a_1,a_2,...,a_n$,以及一正整數$p$,執行下列步驟:

1. 遍歷此序列,若發現某兩相鄰元素$a_i,a_{i+1}$滿足下列條件,則稱此兩元素互相糾纏

  • $popcount(a_i)\equiv popcount(a_{i+1})\ (mod\ p)$

2. 若存在互相糾纏的元素,將他們從序列中移除,重複步驟1.

3. 輸出此序列最終剩下的長度

第一行輸入兩正整數$n,p$,$1\le n\le 10^6$,$1\le p\le 10^9$
第二行輸入$n$個正整數$a_i$,$1\le a_i\le 10^9$

輸出一整數$ans$,表示此序列最終剩下的長度

複製範例
7 2
0 1 0 1 1 0 1 
1
複製範例
9 5
75 28 15 277 12345 3 26 99 45139 
3

提示一:

若$x\in N$,$popcount(x)$表示$x$的所有位數之和

ex: $popcount(12345)=1+2+3+4+5=15$

提示二:

若$a,b,p\in N$,$a\equiv b\ (mod\ p)$表示$a$與$b$對$p$同餘

即$a\mod p=b\mod p$,用程式語言表示即為$a\%p==b\%p$

ex: $8\equiv 13\ (mod\ 5)$,表示$8\mod 5=13\mod 5(=3)$

提示三:

輸入測資可能很大,可以在main函式中加入cin/cout的輸入輸出優化指令

ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

或是使用scanf/printf

data structure stack

竹中軟研39th競賽組期末競賽