codeforces ronda # 632 D (Uso del vector de pensamiento)

Enlace: https://codeforces.com/contest/1333

Tema: En pocas palabras, cambie RL a LR hasta que finalmente se convierta en LLLLLRRRRR, y pregunte la posición de L cada vez (al menos un par de niños giran la cabeza cada segundo, es decir, al menos se genera una posición cada vez) n solo Tres mil, solo violencia

La operación de C ++ es más mágica ... para (int x: v), v es un contenedor, donde x es similar a un iterador, usado para atravesar todos los elementos en v;

Suponga que se han realizado x rondas, y que las operaciones cnt se han realizado un total de veces. La única solución es cuando x <= k, k <= cnt. Avaricioso piense en generar uno por uno y luego k lo suficiente.

Código:

 

#include <bits / stdc ++. h> 
usando el espacio de nombres std; 

const int N = 2e5 + 10; 
int main () 
{ 
    int n, k; 
    char s [3010]; 
    scanf ("% d% d", & n, & k); 
    scanf ("% s", s); 
    vector <vector <int>> v; 
    int cnt = 0; 
    while (1) 
    { 
      vector <int> v1; 
      para (int i = 0; i <n-1; i ++) 
      { 
        if (s [i] == 'R' && s [i + 1] == 'L') 
        { 
            v1.push_back (i); 
            cnt ++; 
            swap (s [i], s [i + 1]); 
            i ++; 
        } 
      } 
      if (v1.empty ()) 
        break;
    if (cnt <k || v.size ()> k) 
    { 
        printf ("- 1 \ n"); 
        devuelve 0; 
    } 
    para (int i = 0; i <v.size (); i ++) 
    { 
        while (v [i] .size ()> 1 && k> v.size ()) // 保证 刚好 k 组 数
        { 
            k--; 
            printf ("1% d \ n", v [i] .back () + 1); 
            v [i] .pop_back (); 
        } 
        printf ("% d", v [i] .size ()); 
        para (int j: v [i]) // 类似 迭代 器
            printf ("% d \ n", j + 1); 
    } 
}
 

 

 

Supongo que te gusta

Origin www.cnblogs.com/sweetlittlebaby/p/12667850.html
Recomendado
Clasificación