Link: https://codeforces.com/contest/1333
Tópico: Simplificando, altere RL para LR até que finalmente se torne LLLLLRRRRR e pergunte a posição de L a cada vez (pelo menos um par de filhos vira a cabeça a cada segundo, ou seja, pelo menos uma posição é exibida a cada vez) n apenas Três mil, apenas violência
A operação C ++ é mais mágica ... for (int x: v), v é um contêiner, onde x é semelhante a um iterador, usado para atravessar todos os elementos em v;
Suponha que x rodadas tenham sido realizadas e operações cnt tenham sido executadas um total de vezes.A única solução é quando x <= k, k <= cnt. Greedy pensa em produzir uma por uma e depois k o suficiente.
Código:
#include <bits / stdc ++. h> usando o espaço para nome std; const int N = 2e5 + 10; int main () { int n, k; char s [3010]; scanf ("% d% d", & n, & k); scanf ("% s", s); vetor <vetor <int>> v; int cnt = 0; while (1) { vetor <int> v1; for (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 ()) quebra; if (cnt <k || v.size ()> k) { printf ("- 1 \ n"); retornar 0; } for (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 ()); for (int j: v [i]) // 器 f printf ("% d \ n", j + 1); }
}