Distanciament aviar (pendent de revisar) X68155


Statement
 

pdf   zip

En un arbre hi viuen 2n12^n - 1 ocells, cadascun en el seu niu. Numerem els ocells de 11 a 2n12^n - 1. El niu que està més avall és el de l’ocell 11, i està just on el tronc es bifurca en dos. A partir d’aquí, anant cap amunt, cada branca es va bifurcant en dos. A cada bifurcació, un ocell té un niu. A més, per a cada ocell ii amb 1i2n111 \leq i \leq 2^{n-1} - 1, els dos nius que té a sobre, seguint les dues subbranques, són els dels ocells 2i2i i 2i+12i+1. Així, l’únic ocell que està a altura 11 és l’ocell 11, els que estan a altura 22 són els ocells 22 i 33, els que estan a altura 33 són els ocells 4,5,6,74, 5, 6, 7, i així succesivament fins a altura nn.

L’ocell 11 ha contret una malaltia molt contagiosa. Si un ocell ii agafa la malaltia, la transmetrà als dos ocells de sobre (excepte si ii està a altura màxima). Alguns dels ocells, espantats, marxen del seu niu. Gràcies a això, no agafen la malaltia i la malaltia no es propaga als ocells de sobre.

Nota: Aquest problema està pendent de revisar

Entrada

L’entrada comença amb un enter nn, indicant que hi ha 2n12^n - 1 ocells, i un enter mm, el nombre d’ocells que fugen. A continuació venen mm nombres diferents a1,a2ama_1, a_2 \dots a_m, els ocells que fugen. Direm que un ocell xx és inferior a un ocell yy si per anar del niu de l’ocell yy al de l’ocell 11 seguint les branques, cal passar pel niu de l’ocell xx. Se’t garantitza que aia_i no és inferior a aja_j per a cap parell (i,j)(i, j) amb iji \neq j.

Sortida

Escriviu un enter: el nombre d’ocells que agafen la malaltia.

Puntuació

  • 200 punts: Casos amb n16n \leq 16

  • 400 punts: Casos amb n29,m105n \leq 29, m \leq 10^5

Information
Author
Víctor Martín
Language
Catalan
Official solutions
C++ Python
User solutions