Skip to Content

Question

Análisis oficial 

Pista 1

Asociamos un subconjunto Sq{1,,12}S_q\subset \{1,\ldots,12\} a cada q[1,N]q\in [1,N] de modo que si BB recibe un par (q,h)(q,h), BB debe responder sí sii hSqh\in S_q (y no en caso contrario).

Pista 2

Debe suceder que hSxSyh\in S_x \setminus S_y. En otras palabras, no existe ningún par (x,y)(x,y) con xyx\neq y tal que SxS_x contenga a SyS_y.

Pista 3

El número 920 parece extrañamente específico. ¿Se relaciona de algún modo con 12?

Pista 4(126)=924>920\binom{12}{6} = 924 > 920
Solución

Podemos simplemente asociar cada qq con un subconjunto distinto SqS_q de tamaño 6.

#include "question.h" using namespace std; int sets[925][12]; void Init(int N) { for (int i = 0, cnt = 1; i < (1 << 12); i++) { if (__builtin_popcount(i) == 6) { for (int j = 0; j < 12; j++) if (i & (1 << j)) sets[cnt][j] = 1; else sets[cnt][j] = 0; cnt++; } } } int Alice(int x, int y) { for (int i = 0; i < 12; i++) if (sets[x][i] && !sets[y][i]) return i + 1; } int Bob(int q, int h) { return sets[q][h - 1]; }