codeforce título cepillo (II)

CodeForces 1329A Dreamoon Le gusta colorear

El significado de los problemas

$ $ N cuadrados, $ operaciones m $, operaciones de $ I $ $ I $ utilizando el primer color continuo de tinte $ $ L_i enrejado, una solución de cualquier solicitud dada, tal que:

  • Cada cuadrícula están infectados con el color
  • Cada color se muestra, ni la existencia de un color está completamente cubierto

solución del problema

Obviamente, si el \ (\ sum_ {I} = ^ {m}. 1 L_i <n- \) , este esquema no está presente. Si el primer $ i $ colores teñidos empezar desde $ i $ rejilla, hay dos escenarios posibles

  • Si \ (I + L [I] -. 1> n- \) , la condición no se satisface presente realización, debido a los colores de tinte de $ I $, $ no exceda solución $ n-cuadrados, sólo $ sobrescritura I $ frente al color, que no satisface la condición 2: no hay color está completamente cubierta
  • No \ (I + L [I] -. 1> n- \) , $ m $ describió operaciones no totalmente porción transfectadas rejilla de celosía o simplemente porción completamente teñido. Considere hacia delante desde los primeros $ operaciones m $ en el \ (n - l [m] + 1 \) de celosía en el que comienza la tinción de $ m - 1 operaciones $ en el \ (n - l [m] - l [m - 1] + 1 \) de celosía en el comienzo de la tinción, los m $ - 2 operaciones $ al \ (n - l [m] - l [m - 1] - l [m - 2] + 1 \ ) de red en el comienzo de la tinción, seguido de la recurrencia. En el proceso recursivo, el final de la zona de determinación no es un colorante color de la mancha de la posición de inicio de la color actual. Por ejemplo: si \ (.. (M - 1) + L [. M - 1]> = n-- L [m] + 1 \) , una descripción de toda la rejilla están manchadas, y aparecerá cada color.

Tenga en cuenta que una operación secuencial no puede ser ordenada. Al mismo tiempo, por lo que ocurrencia - \ (1> n \ i + l [i]) representa la I $ $ será completamente cubierto de color precedente. ideas muy maravillosas: en primer lugar la cromatina compacta, y luego considerar de atrás hacia adelante, el área manchada para moverse hacia atrás, juegan un papel en la compensación. animación

int main()
{
    cin >> n >> m;

    long long sum = 0;
    for (int i = 1; i <= m; ++i) {
        cin >> l[i];
        sum += l[i];
        ans[i] = i;
        
        if (i + l[i] - 1 > n) {
            puts("-1");
            return 0;
        }
    }

    if (sum < n) {
        puts("-1");
        return 0;
    }

    
    for (int i = m; i >= 1; --i) {
        ans[i] = n - l[i] + 1;
        n = n - l[i];
        if (i - 1 + l[i - 1] >= ans[i]) {
            break;
        }

    }

    for (int i = 1; i <= m; ++i) cout << ans[i] << " ";
    cout << endl;
    return 0;
}

Supongo que te gusta

Origin www.cnblogs.com/zgglj-com/p/12659893.html
Recomendado
Clasificación