Ronda CF # 633
A. Encuentra patrones
Empezar a pintar
https://www.luogu.com.cn/record/32752272
B. construcción, matemáticas
Dado un número n, encuentra una secuencia de ellos
Haga que la secuencia de valor absoluto formada por la diferencia entre el anterior y el siguiente en esta secuencia sea una secuencia no descendente
Idea: ordenar primero de pequeño a grande
El más grande está al final, el más pequeño está en el penúltimo, el segundo más grande está en el penúltimo, el segundo más pequeño está en el penúltimo ...
Atención, impares
https://www.luogu.com.cn/record/32752274
C. Matemáticas
Dada una secuencia
Puede agregar 2 ^ (T-1) a cualquier número de elementos en T segundos
Ahora pregunte al menos cuántos segundos tiene que terminar para que la secuencia no sea descendente
Idea: Obviamente, su valor final es lo más pequeño posible, y la combinación de la suma de P a la potencia de 2 puede constituir todos los valores posibles en 1-2 ^ (P + 1) -1, por lo que una vez que encuentre un elemento El primero es pequeño, entonces puedes hacerlo igual que el primero
Las estadísticas muestran que la mayor diferencia tiene su dígito más a la izquierda.
https://www.luogu.com.cn/record/32752240
D. Búsqueda, XOR
Dado un árbol, ahora debe dar los pesos de borde de modo que la suma XOR de la ruta simple formada por dos nodos secundarios sea 0
El tipo de peso que desea es el más pequeño, el más grande es
Ideas:
En primer lugar, le da a un árbol, cualquiera de los nodos para construir un árbol (no necesariamente un árbol binario)
El más pequeño no es más que 1 o 3.
Si las rutas formadas entre los nodos de la hoja son bordes pares, entonces puede asignar el mismo valor y hay bordes singulares, entonces se necesitan al menos 3 números, por qué (puede considerar comprimir la ruta en una cadena , El número impar en la cadena es 3
La construcción del árbol es aleatoria, por lo que la paridad de profundidad de los nodos de hoja de todos los subárboles es la misma, por lo que puede ser 1.
Pensar a su vez
Suponga que se pueden contar todos los lados y luego vea qué lados no son verdaderos
Por ejemplo, el nodo primario solo está conectado a dos nodos secundarios separados, entonces los dos bordes deben ser iguales, que es un borde menos
void dfs(int cur,int fa,int depth)
{
if(node[cur].size()==1)
{
if(depth&1)ji=1;
else ou=1;
ans-=vis[node[cur][0]];
vis[node[cur][0]]=1;
}
for(int i=0;i<node[cur].size();i++)
{
if(node[cur][i]!=fa)dfs(node[cur][i],cur,depth+1);
}
}
Atencion
ans-=vis[node[cur][0]];
vis[node[cur][0]]=1;
No se puede escribir como
ans-=vis[fa];
vis[fa]=1;
Debido a que construye un árbol con destino, el nodo primario en sí puede ser un nodo hoja, así que preste especial atención