PAT Nivel B-Fragmento y Suma de Secuencia

Descripción del título
Dada una secuencia de números positivos, podemos interceptar cualquier número de números consecutivos, llamados fragmentos.

Por ejemplo, dada la secuencia {0.1, 0.2, 0.3, 0.4}, tenemos

  • (0,1) (0,1; 0,2) (0,1; 0,2; 0,3) (0,1; 0,2; 0,3; 0,4)
  • (0,2) (0,2; 0,3) (0,2; 0,3; 0,4)
  • (0,3) (0,3; 0,4)
  • (0,4)

Estos 10 fragmentos.

Dada una secuencia de números enteros positivos, encuentre la suma de todos los números contenidos en todos los fragmentos.

Por ejemplo, el total de 10 fragmentos en este ejemplo es 0,1 + 0,3 + 0,6 + 1,0 + 0,2 + 0,5 + 0,9 + 0,3 + 0,7 + 0,4 = 5,0.

Formato de entrada La
primera línea da un entero positivo N, que representa el número de números en la secuencia, y la
segunda línea da N números positivos que no exceden 1.0, que son los números en la secuencia, separados por espacios.

Formato de
salida Muestra la suma de los números contenidos en todos los segmentos de la secuencia en una línea, con una precisión de 2 dígitos después del punto decimal.

Ejemplo de entrada
4
0,1 0,2 0,3 0,4

Salida de muestra
5,00

Rango de datos
N <10 . 5


Solución de problemas
Recuento de combinaciones:

解题思路: Cuente el número de veces que cada número aparece en diferentes segmentos consecutivos;

找规律: Suponga que la secuencia es 1 2 3 4, entonces

  1. Prefijo para el final de la 33: 23,, 123, el número de prefijo es 3;
  2. 3 es el comienzo del sufijo: 3,, 34sufijo número 2;
  3. 3 fragmento comprende todos 3, 23, 123, 1234, 234, 34, en una cantidad de 6;
  4. Por lo tanto, en iel número total de veces que ocurre i × (n - i + 1);
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    
    
	int n;
	cin >> n;
	
	long double ans = 0;
	for (int i = 1; i <= n; i ++)
	{
    
    
		long double x;
		cin >> x;
		ans += x * i * (n - i + 1);
	}
	
	printf("%.2llf", ans);
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_46239370/article/details/114637295
Recomendado
Clasificación