题目大意;

输入n和m,n是n个字符,m是m个前缀。对前缀的规定可以配对的括号。比如(),,((()))等等。在输入n个括号字符,对这个n个字符,通过交换使其满足m个前缀。交换次数不限,规则想当与reverse函数

题解:

先构造m-1个前缀,使其均为"()"。然后剩下的字符构造最好一个前缀。。。。。如果当前字符与构造的字符不同,那么从当前字符后面找到一个与当前字符相反的字符,然后直接swap.

这里为什么用户swap而不是reverse?

可以模拟一下。。比如)))(   我们找的是第一个与当前字符相反的字符,也就是说当前字符和被到的字符之间的字符都是相同的,所以我们直接让开头和结尾交换一下就行了

#include<bits/stdc++.h>
using namespace std;
const int N=1E5+;
struct stu{
int a,b;
}nu[N];
char arr[N];
void solve(){
string s="";
int n,m;
cin>>n>>m;
scanf("%s",arr);
for(int i=;i<=m-;i++) s+="()";
int num=(n-(m-)*)/;
for(int i=;i<=num;i++) s+='(';
for(int i=;i<=num;i++) s+=')';
int numm=;
for(int i=;i<n;i++){
if(arr[i]==s[i]) continue ;
int pos=i+;
while(arr[i]==arr[pos]) pos++;
nu[numm++]={i+,pos+};
swap(arr[i],arr[pos]);
}
cout<<numm<<endl;
for(int i=;i<numm;i++) cout<<nu[i].a<<" "<<nu[i].b<<endl;
return ;
}
int main(){
int t;
cin>>t;
while(t--) solve();
return ;
}

最新文章

  1. VS2015安装&amp;简单的C#单元测试
  2. call经常用到的地方
  3. linux下好用的软件
  4. apache CXF wsdl2java工具的使用
  5. OpenStack-Mitaka 一键安装测试环境脚本
  6. c/c++工程中外部头文件及库添加方法
  7. linux驱动程序之电源管理之标准linux休眠和唤醒机制分析(二)
  8. C++版 Chip8游戏模拟器
  9. Java使用jackson问题解决
  10. css画图形
  11. ubuntu使用crontab
  12. iOS 界面 之 EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具
  13. Vijos 1010 清帝之惑之乾隆
  14. More DETAILS! PBR的下一个发展在哪里?
  15. linux 保留内核中sas驱动的加载导致crash问题
  16. C语言第二次作业-----顺序结构
  17. c#面试题汇总(1)
  18. python insert所用 插入到自定的位置
  19. Javascript继承6:终极继承者----寄生组合式继承
  20. ASP.Net Post方式获取数据流的一种简单写法

热门文章

  1. POJ1144 tarjan+网络中割点与割边的数量
  2. Python Seaborn综合指南,成为数据可视化专家
  3. 十分钟一起学会Inception网络
  4. Selenium系列(十六) - Web UI 自动化基础实战(3)
  5. Python python 函数参数:参数组合
  6. EF Core 数据变更自动审计设计
  7. windows远程桌面内部错误的处理方法
  8. 树形dp技巧,多叉树转二叉树
  9. linux 之虚拟机的安装与介绍
  10. Java构造方法的姿势与易错点