链接: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 "); return 0; } for(int i=0; i<v.size(); i++) { while(v[i].size()>1&&k>v.size())//保证刚好k组数 { k--; printf("1 %d ",v[i].back()+1); v[i].pop_back(); } printf("%d ",v[i].size()); for(int j : v[i])//类似迭代器 printf("%d ",j+1); }
}