Los programadores envían naranjas

Descripción del título

Cada año en el 1024 Programmer Festival, Dark Horse Programmers llevará a cabo una gran celebración. El Día del Programador de este año no es una excepción, y cada compañero de clase envía naranjas.

En la clase, hay n estudiantes en fila de adelante hacia atrás, y han aprendido los resultados de estos estudiantes, de los cuales el puntaje del estudiante i-ésimo es ai . El director quiere evaluar la cantidad de naranjas según los puntajes de los estudiantes en la etapa anterior. Para motivar a los estudiantes sobresalientes, se deben cumplir los siguientes requisitos al enviar naranjas:

  • Debe haber más naranjas entre los estudiantes con buenas calificaciones en la clase adyacente. Si los compañeros de clase adyacentes tienen las mismas calificaciones, deben recibir la misma cantidad.
  • A cada alumno se le asigna al menos una naranja

Debido al presupuesto limitado, el director espera emitir la menor cantidad posible de naranjas de acuerdo con los requisitos. Disculpe, ¿cuántas naranjas necesito preparar?

Formato de entrada

La primera línea es un número entero positivo n que no excede 10 ^ 6 , que indica el número de estudiantes.

En la siguiente línea, hay n  enteros no negativos ai que no exceden 10 ^ 9 , lo que indica la puntuación del i- ésimo compañero de clase.

Formato de salida

Produzca la respuesta, es decir, cuántas naranjas deben prepararse.

Entrada de muestra:

11
3 6 9 4 7 7 2 13 15 15 19

Salida de muestra:

24

 

 Idea: Esta es una subcolumna no decreciente hacia adelante y hacia atrás. Inicialice a todos para que tengan una naranja, y luego atraviese la matriz, esta última es más alta que la puntuación anterior, luego la naranja es una más, y luego repita nuevamente la matriz, también Encuentre las subcolumnas sin restar y finalmente sume la matriz para sumar.

#include <cstdio> 
#include < string .h> 
#include <iostream> 
#include <algorithm> 
#include <sstream> 
#include <math.h> 
#include <map>
 usando el  espacio de nombres std;
const  int inf = 999999 ; // 0x7fffff 
const  long  long mod = 1e9 + 7 ;
const  doble PI = acos (- 1 ); 

largo  largo n, m;
largo  largo ans = 0 ;
boolvis [ 105 ];
 long  long dis [ 10000000 ], get [ 10000000 ];
 int main () 
{ 
    cin >> n;
     for ( int i = 1 ; i <= n; i ++ ) { 
        cin >> dis [i];
         get [i] = 1 ;                                   // Inicializa la matriz get, porque cada alumno tiene al menos 1 naranja 
    }
     para ( int i = 2 ; i <= n; i ++) {                            // escanea la matriz de izquierda a derecha, equivalente a de izquierda a derecha para encontrar columnas niño sin disminuir   
        si(dis [i]> dis [i- 1 ]) {                       // Si la puntuación del siguiente alumno es mayor que el número de naranjas del alumno anterior, hay una naranja más que la del alumno anterior 
            get [i] = get [i- 1 ] + 1 ; 
        } 
        de lo contrario  if (dis [i] == dis [i- 1 ]) {                   // El puntaje es igual al número de naranjas también debe ser igual 
            get [i] = get [i- 1 ]; 
        } 
    } 
    for ( int i = n- 1 ; i > = 1 ; i-) {                      // Luego escanea la matriz de derecha a izquierda nuevamente, también encuentra la subcolumna no decreciente de derecha a izquierda 
        if (dis [i]> dis [i + 1 ]) {
            get [i] = max ( get [i], get [i + 1 ] + 1 );          // Del mismo modo, el número de naranjas con notas altas es uno más que el número de naranjas con notas bajas siguientes El mayor del último resultado y el resultado anterior 
        }
         else  if (dis [i] == dis [i + 1 ]) {                // El número de naranjas iguales también debe ser igual 
            get [i] = get [i + 1 ]; 
        } 
    } 
    para ( int i = 1 ; i <= n; i ++) {                     // acumula el número de naranjas 
        ans + = get [i]; 
    } 
    cout << ans;
    devuelve  0 ; 
}

 

 

Supongo que te gusta

Origin www.cnblogs.com/xusi/p/12716166.html
Recomendado
Clasificación