量子糾纏
發布時間: 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
複製範例
9 5
75 28 15 277 12345 3 26 99 45139
提示一:
若$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