Considere tres conjuntos A
, B
y C
cada uno contiene n
enteros. De esto podemos hacer el set
S_n = {a * b + c | a in A, b in B, c in C}.
Dado un n
, hay uno o más tamaños mínimos S_n
que dependen de los conjuntos que A,B and C
se hayan elegido.
Los conjuntos pueden contener n
enteros distintos (positivo, cero o negativo). No es necesario que sean enteros consecutivos o que los conjuntos sean iguales entre sí, por ejemplo. A = {-1, 0, 5, 10, 27}, B = {2, 5, 6, 10, 14} and C = {-23, 2, 100, 1000,10000}
es aceptable (aunque no es una buena idea) por ejemplo.
Tarea
La tarea es escribir código para encontrar el conjunto más pequeño S_n
que pueda para cada uno n
de 1
a 20
.
Para cada uno n
de 1
a 20
su código debe emitir el elegido A
,B
yC
junto con el tamaño resultante deS_n
Puntuación
Su puntaje será la suma de los tamaños de S_n
que cree. Es decir, será una suma de veinte números.
Cuanto más bajo sea el puntaje, mejor.
Ejemplos
Si A = B = C = {1, 2, 3, 4}
entoncesS_4 = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
cual es de tamaño19
.
Sin embargo, esto no es de ninguna manera óptimo. Por ejemplo, A = B = C = {-1, 0, 1, 2}
da S_4 = {0, 1, 2, 3, 4, 5, 6, -1, -3, -2}
cuál es de tamaño10
.
Tiempos
Como tendré que ejecutar su código para verificar la salida, asegúrese de que no demore más de 30 minutos y 4 GB de RAM en ejecutarse en un escritorio normal.
Notas
Su código realmente debe calcular la salida. No está permitido codificar respuestas precalculadas en su código.
fuente
Respuestas:
Óxido, puntaje
14121411src/main.rs
Cargo.toml
Compila y ejecuta con
cargo run --release
.Salida
En mi computadora portátil, esto usó aproximadamente 8 minutos y aproximadamente 1.5 GiB de memoria.
Cómo funciona
Suponemos (sin ninguna justificación particular) de que A y B son la gama de enteros consecutivos obvia centrada en 0 o ½, y luego hacer una búsqueda A * para una óptima C dada A y B .
fuente
B
yC
puedes hacer la misma búsqueda A *A
? Estoy pensando en una especie de enfoque de descenso coordinado. Arregle todos los conjuntos menos uno, optimice el último y repita.A = B
dos enteros consecutivos son siempre óptimos. Solo un contraejemplo sería emocionante.Axioma, puntaje 1466
Los conjuntos serían A = B = [- n / 2..n / 2] si n% 2 == 0 más A = B = [- n / 2 .. ((n / 2) +1)]
El conjunto C es la suma de la matriz como [-2, -1, .. (n-2)] a una matriz arr [] de este tipo [0,0,0,0,0] o [0,1 , 1,1,2] o [0,0,0,0,3] para que la matriz tenga propiedad
Si desea ser más preciso o su PC es más rápida, puede intentar aumentar '3' en 'inc (aix, 3)' que aumenta el número de matrices para la variación del conjunto C y, por lo tanto, aumentaría la precisión del resultado.
En los resultados, la cadena impresa es
donde B = A y | S | es el número de elemento de S
fuente
SQL Server, 1495
La solución se puede verificar aquí .
Disculpe porque la salida está en forma de tabla.
fuente
C, puntaje
14481431Sería el mismo +/- algo de implementación de Axiom
resultados
fuente
Python 2 , puntaje 1495
Pruébalo en línea!
Una línea de base simple para que cada conjunto sea un intervalo de longitud-n centrado alrededor de 0, ligeramente desequilibrado incluso para n. El TIO tiene código Python para calcular su puntaje.
El tamaño es
(n*n+1)/2
para n impar y(n*n+n)/2
para n par.fuente
Mathematica, puntaje 1495
fuente
C ++, puntaje 1411
Conjeturando A y B son enteros consecutivos centrados cerca de 0, simplemente use el recocido simulado para encontrar C.
Fuente:
Resultados:
Con -O2 en mi computadora, se necesitan 50 segundos para calcular todos los resultados.
fuente