Editorial for Buen Equipo
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Definamos y . Ła respuesta sería .
Veamos primero cómo calcular . Notemos que para cada , se cumple que . Por tanto, podemos iterar entre cada par de cubos consecutivos y añadir la raíz cúbica del menor de cada uno () tantas veces como números hay entre ellos. Debemos tener cuidado en el último par de cubos, cuando el límite superior supera .
La misma idea se puede aplicar para calcular . En este caso, para cada se cumple que . Por tanto podemos iterar por cada par de cuadrados consecutivos y añadir la raíz cuadrada del mayor de cada uno tantas como números hay entre ellos. Aquí debemos tener cuidado cuando el límite superior de cada rango supera a .
Con todo lo anteriormente dicho:
La complejidad temporal está dominada por cómo calculamos , ya que . Entonces sería .
Código de ejemplo:
#include<bits/stdc++.h>
using namespace std;
long long sq(long long x){ return x * x; }
long long cub(long long x){ return x * x * x; }
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
long long n;
cin >> n;
long long a = 0, b = 0;
for(long long i = 1; cub(i) <= n; i++)
a += i * (min(n + 1, cub(i + 1)) - cub(i));
for(long long i = 0; sq(i) <= n; i++)
b += (min(n, sq(i+1)) - sq(i)) * (i + 1);
cout << a + b;
return 0;
}
Comments
Hi, el problema tambien puede ser resuelto en utilizando una formula (esta mas abajo), para llegar a ella hay que analizar: Te piden la suma de todos los elementos de un arreglo , donde cada posicion contiene . En otras palabras, la solucion es: Lo que nos permite analizar por separado:
Si se observa la grafica o solamente los valores va a aparecer algo asi: Osea los numeros se van a ir repitiendo. Pero se van a ir repitiendo segun un patron, el 1 se repite 1 vez, el 2 se repite 3 veces, y asi, al N-esimo numero se repite veces (es sencillo demostrarlo). Siguiendo con la idea, necesitamos sumarlos: Donde es la raiz del cuadrado inmediatamente inferior a N, osea , por lo que nos falta sumarle el intervalo que se nos queda Y con eso listo por esta parte.
Procedemos igual que en el paso anterior, los valores son , hay numeros N (no confundir con , de la entrada), puedes comprobarlo si quieres, luego:
Con . Y agregamos lo que nos quedaba al igual que ahorita: . Y listo, juntando todo hasta aca queda la solucion: (No sustituyan y porque da miedo).
Mi codigo:
(sorry, tenía un error en la parte de , ya lo arreglé cualquier error diganme)