Este problema se puede resolver utilizando el algoritmo de divide y vencerás
- Necesitas dividir cada matriz en el medio
- Calcule la suma y devuelva la suma
- El caso base es cuando izquierda == derecha
Código sugerido para este problema
#include
usando el espacio de nombres estándar;
int arr [100000];
doble f (int l, int r, int sz) {
si (l == r) {
return (doble) arr [l];
}
int m = l + (rl) / 2;
doble s1 = f (l, m, (sz + 1) / 2);
doble s2 = f (m + 1, r, (sz) / 2);
doble ans = (doble) ((doble) ((doble) ((doble) s1 * (doble) ((int) ((sz + 1) / 2))) + (doble) (s2 * (doble) (( int) (sz) / 2))) / (doble) sz);
// cout << ans << "" << l << "" << r << endl;
volver ans;
}
- Cada vez que intento resolver un problema en CodeChef o SPOJ, aparece el error de límite de tiempo excedido. ¿Qué tengo que hacer? ¿Me faltan algoritmos?
- ¿Es necesario aprender un algoritmo antes de aprender cualquier lenguaje de programación?
- Si F2L se resuelve mejor de forma intuitiva, ¿por qué cada tutorial incluye algoritmos para todos los casos de F2L?
- ¿Qué debo aprender en línea si quiero obtener un trabajo bien remunerado en TI en India? ¿Debería ser algo así como algoritmos de estructura de datos o un lenguaje como Python o R o algo así como un desarrollador de aplicaciones de Android o algo más?
- ¿Por qué los algoritmos de compresión de datos sin pérdida no funcionan bien en archivos de video?
int main () {
int n;
cin >> n;
para (int i = 0; i <n; i ++)
cin >> arr [i];
cout << f (0, n-1, n);
devuelve 0;
}
Enlace de Ideone: Ideone.com
La complejidad temporal es T (n) = 2 * T (n / 2) + O (1) = O (n)
PD: Probablemente he entendido la consulta correctamente, si tiene más consultas por favor comente.