题目链接:点击查看

题目大意:给出 n 代表字符串长度,k 代表操作次数,还有一个长度为 n ,只包含 ' L ' 和 ' R ' 的字符串 s ,对于每次操作,可以选择数对不相交的 i ,满足 a[ i ] == ' R ' && a[ i +1 ] == ' L ' ,操作可以使得 a[ i ] = ' L ' , a[ i +1 ] = ' R ' ,问能否恰好进行 k 次操作,使得所有的 L 都位于字符串的左半部分,且所有的 R 都位于字符串的右半部分

题目分析:1750 分的一道构造题,比赛时完全交给队友去做了,自己签完到后直接去了 F 题,赛后反思感觉应该去帮队友一下的,因为补题的时候发现这是一道偏向模拟的构造题,相对来说我还是比较擅长的。。有点可惜,死脑筋去磕 F 题,导致 D 和 F 两个题都没做出来,唉

首先要理解题目中的操作其实就是交换满足条件的相邻的一对字符,而读完题后我是直接猜出了一个结论,那就是无论如何交换,最后使得字符串满足条件的操作总数是相同的,而可以变换的是如何分组,举个很简单的例子,对于 RLRLRL 这个字符串,我们可以一回合直接改变第一对,第二对以及第三对 RL ,也就是一次操作为

3 1 3 5

也可以分三个回合分别改变这三个位置,也就是输出

1 1

1 3

1 5

明白了这里之后就不难想了,因为 n 只给到了 3000 ,所以我们可以直接 n * n 去贪心维护出分组最少的情况,分组数可以记为 cnt ,同时记得维护一下总操作数 tot ,有了这两个变量之后就可以特判 -1 的情况了,显然如果 k 比最小分组 cnt 还要小时,或者 k 比总操作数 tot 都要大时是 -1 的情况,其余情况都是可以通过拆分最小分组 cnt 来达到的,剩下的模拟就好了,实现起来也是有技巧的,具体的可以参考代码

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e6+100;char s[N];vector<int>ans[N];int cnt=0,tot=0,n,k;int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);scanf("%d%d",&n,&k);scanf("%s",s+1);bool flag;do{flag=false;cnt++;//最少分组数 for(int i=1;i<n;i++)if(s[i]=='R'&&s[i+1]=='L'){swap(s[i],s[i+1]);ans[cnt].push_back(i);flag=true;i++;tot++;//总操作数}}while(flag);cnt--;if(cnt>k||tot<k) return 0*puts("-1");for(int i=1;i<=cnt;i++){while(k>(cnt-i+1)&&ans[i].size())//这里是判断剩下的分组与还需要输出的个数k的大小关系{printf("%d %d\n",1,ans[i].back());ans[i].pop_back();k--;}if(ans[i].size()){printf("%d",ans[i].size());for(int j=0;j<ans[i].size();j++)printf(" %d",ans[i][j]);puts("");k--;}}return 0;
}

CodeForces - 1333D Challenges in school №41(构造+模拟)相关推荐

  1. blob转file对象_C++核心准则C.41:构造函数生成的对象应该被完全初始化

    C.41: A constructor should create a fully initialized object C.41构造函数生成的对象应该被完全初始化 Reason(原因) A cons ...

  2. CodeForces - 1301D Time to Run(构造+模拟)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,现在每两个格子之间都有一条双向的通道,初始时有个人在左上角的格子中,现在要求这个人精确的走 k 条路,不过每条路只能走一次,但是每个格子可以走无限次 ...

  3. CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)

    题目链接:点击查看 题目大意:给出一个n*m的农场,其中'.'代表空地,'R'代表大米,现在有k只鸡需要分布在这个农场之中,需要满足以下条件: 每个方格都要被鸡占领 每只鸡至少占领一个方格 每只鸡占领 ...

  4. CodeForces - 1334D Minimum Euler Cycle(构造+模拟)

    题目链接:点击查看 题目大意:给出一个由 n 个顶点组成的完全图,求出一个从点 1 出发的欧拉回路,使得字典序最小,不知道欧拉回路的同学请自行百度 题目分析:字典序最小,那么就说明让序号小的顶点在前面 ...

  5. Codeforces 610C:Harmony Analysis(构造)

    [题目链接] http://codeforces.com/problemset/problem/610/C [题目大意] 构造出2^n个由1和-1组成的串使得其两两点积为0 [题解] 我们可以构造这样 ...

  6. Codeforces 1276C/1277F/1259F Beautiful Rectangle (构造)

    题目链接 http://codeforces.com/contest/1276/problem/C 题解 嗯,比赛结束前3min想到做法然后rush不出来了--比赛结束后又写了15min才过-- 以下 ...

  7. Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟

    A. Gabriel and Caterpillar 题目连接: http://www.codeforces.com/contest/652/problem/A Description The 9-t ...

  8. CodeForces - 1504C Balance the Bits(思维+构造)

    题目链接:https://vjudge.net/problem/CodeForces-1504C 题目大意:给出一个长度为 nnn 的 010101 串,现在要求构造出两个长度为 nnn 的合法括号序 ...

  9. Codeforces Beta Round #5 B. Center Alignment 模拟题

    B. Center Alignment 题目连接: http://www.codeforces.com/contest/5/problem/B Description Almost every tex ...

最新文章

  1. 计算机顶会论文投稿指南
  2. 【若依(ruoyi)】quartz.sql 脚本重新导入时,遇到因foreign key外键无法删除错误#1217
  3. 20165234 《Java程序设计》第六周学习总结
  4. 大众点评app 数据解密和反序列化
  5. mysql 设置字段自动增长值_mysql命令行脚本
  6. 基于java二手书论文_java毕业设计_springboot框架的二手书交易管理与实现
  7. 模块化解耦框架RxFluxArchitecture3-订阅管理绑定生命周期
  8. pycharm如何设置python版本、设置国内pip镜像、添加第三方类库
  9. 锐起无盘系统菜鸟教程
  10. [全网最新最全]2020年国内和国外安卓应用上线上架应用市场渠道集合(关键词:apk,发布,Google Play,Android,详细步骤介绍流程)
  11. 新型基础测绘与实景三维中国建设技术文件【2】基础地理实体分类、粒度及精度基本要求
  12. 汇编语言集成开发环境 RadASM 中文版 (修复object file not found报错)
  13. 怎么给图片添加水印?教你一键添加水印
  14. html周志模板,毕业设计指导周志模板
  15. android:layout_margintop=3dip,ConstraintLayout 中android:layout_marginStart
  16. 自己搭建安卓app结合苹果CMS后台视频管理
  17. linux dd创建大文件模拟磁盘不足监控
  18. STM32 ADC 单次模式、连续模式、扫描模式
  19. 【统计学】参数估计、点估计、区间估计、置信区间
  20. Leetcode-数组-904

热门文章

  1. zabbix mysql版本号_zabbix 监控mysql5.6版本 及主从
  2. think php 缩放图片,THINKPHP+JS实现缩放图片式截图的实现
  3. Redis AOF带来的问题
  4. SpringSecurity remeber功能源码跟踪
  5. MySQL语法解析和预处理(Parser Preprocessor)
  6. Redis面试题详解
  7. File类的构造方法
  8. Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改
  9. Feign深入学习(二)
  10. xcode 不能读取键盘输入的汉字_C++:cin从控制台读取数据时的结束符