codeforces round #632 D (思维vector的使用)

链接:https://codeforces.com/contest/1333

题意:简单来说,就把RL 换成LR直到最后变成LLLLLRRRRR,问每次的L的位置,(每隔一秒至少一对孩子转头即,每次l至少输出一个位置)n只有三千,暴力就好

c++操作比较神奇....for(int x : v),v是一个容器,其中x就类似于一个迭代器,用于遍历v中的所有元素;

设进行了x轮,共操作了cnt次,有解的情况只有当x <= k,k <= cnt,贪心的考虑一下先一个一个输出之后凑够k个就行;

代码:

 

#include<bits/stdc++.h>
using namespace 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;
      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())
        break;
      v.push_back(v1);
    }
    if(cnt<k||v.size()>k)
    {
        printf("-1\n");
        return 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])//类似迭代器
            printf("%d\n",j+1);
    }
}

 

 
posted on 2020-04-12 16:45  mmn  阅读(141)  评论(0编辑  收藏  举报