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); }
}