codeforces round # 632 D (Uso do vetor de pensamento)

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

 

 

Acho que você gosta

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