题意

有一个括号序列,你可以选择两个位置i,j(i可以等于j),进行交换。使得最后的循环位置(i的数目)最大。

循环位置:i(0<=i<len),将前i个字符移到最后,得到的新序列是合法的括号序列。

  • )()()( 的循环位置有 1、3、5
  • )((()))( 的循环位置有 1、7

思路

这题还有个大数据范围版本,那题思路太神仙了,我等凡人就学学暴力吧!这题有个结论,假设)为-1,(为+1,那么一个括号序列的循环匹配个数等于前缀和最小值的个数。证明参考某大佬的:

假设对于序列)()(,它的前缀和是-1 0 -1 0

当上述前缀值<0时,这个前缀序列一定是不合法的。然后考虑什么时候把括号序列的一段前缀移到后面去是合法的。

首先你需要使得移动之后,前面的括号序列合法。也就是说你得把一段“连续的极长非合法前缀”找出来(对于样例是))。这个东西恰好在前缀和第一次取得最小值时取得(前缀和取-1)。然后实际上你还可以在这个前缀后面接上一些“本身合法”的括号序列,像这样:)()。后面那个合法的序列对答案没有影响,因此循环移位的数量就是前缀和最小值的数量。

然后我们就可以O(n^3)暴力啦!

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int n;
string s;
int solve()
{
int sum=0,mi=0,cnt=0;
for(int i=0; i<n; i++)
{
if(s[i]=='(')
cnt++;
else
cnt--;
mi=min(cnt,mi);
}
cnt=0;
for(int i=0;i<n;i++)
{
if(s[i]=='(')
cnt++;
else
cnt--;
if(cnt==mi)
sum++;
}
return sum;
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>s;
int cnt=0;
for(int i=0; i<n; i++)
{
if(s[i]=='(')
cnt++;
else
cnt--;
}
if(cnt)
{
cout<<"0\n1 1"<<endl;
return 0;
}
int ans=solve();
int l=1,r=1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
swap(s[i],s[j]);
int tmp=solve();
if(tmp>ans)
{
l=i,r=j;
ans=tmp;
}
swap(s[i],s[j]);
}
}
cout<<ans<<endl;
cout<<l+1<<" "<<r+1<<endl;
return 0;
}

  

CodeForces - 1248D1 (思维+暴力)的更多相关文章

  1. codeforces 768 C. Jon Snow and his Favourite Number(思维+暴力)

    题目链接:http://codeforces.com/contest/768/problem/C 题意:给出n个数,k个操作,和一个x,每次操作先排序然后对奇数位数进行xor x操作,最后问k次操作后 ...

  2. CodeForces - 1244D (思维+暴力)

    题意 https://vjudge.net/problem/CodeForces-1244D 有一棵树,有3种颜色,第i个节点染成第j种颜色的代价是c(i,j),现在要你求出一种染色方案,使得总代价最 ...

  3. Nice Garland CodeForces - 1108C (思维+暴力)

    You have a garland consisting of nn lamps. Each lamp is colored red, green or blue. The color of the ...

  4. CodeForces - 593A -2Char(思维+暴力枚举)

    Andrew often reads articles in his favorite magazine 2Char. The main feature of these articles is th ...

  5. CodeForces - 1230C(思维/暴力)

    题意 https://vjudge.net/problem/CodeForces-1230C 给了你总共有21张多米诺骨牌,每张牌有两个面,然后给你一个无向图,保证没有环和一个顶点多条边的情况存在.现 ...

  6. CodeForces - 1228D (暴力+思维+乱搞)

    题意 https://vjudge.net/problem/CodeForces-1228D 有一个n个顶点m条边的无向图,在一对顶点中最多有一条边. 设v1,v2是两个不相交的非空子集,当满足以下条 ...

  7. Nikita and string [思维-暴力] ACM

    codeforces Nikita and string time limit per test   2 seconds memory limit per test   256 megabytes O ...

  8. Karen and Game CodeForces - 816C (暴力+构造)

    On the way to school, Karen became fixated on the puzzle game on her phone! The game is played as fo ...

  9. Chladni Figure CodeForces - 1162D (暴力,真香啊~)

    Chladni Figure CodeForces - 1162D Inaka has a disc, the circumference of which is nn units. The circ ...

随机推荐

  1. 网络编程~~~osi五层协议

    物理层 / 数据链路层 / 网络层 / 传输层 / 应用层(表示层/会话层) 一 物理层 物理层指的就是网线,光纤, 双绞线等物理传输介质 物理层发送的是数据(比特流) 二 数据链路层 数据链路层对数 ...

  2. 近期用到了Git,就简单介绍下具体用法吧

    pull:是下拉代码,相等于将远程的代码下载到你本地,与你本地的代码合并push:是推代码,将你的代码上传到远程的动作完整的流程是: 第一种方法:(简单易懂) 1.git add .(后面有一个点,意 ...

  3. 安装HomeBrew 失败的解决方案(Error: Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core failed!)

    在安装HomeBrew(或者安装成功 执行相关指令)时遇到错误提示: Error: Failure while executing: git clone https://github.com/Home ...

  4. Unity如何更改精灵中心点

      Unity虽然可以改中心点但是仅支持几个特定位置. 如果是一个你是切割的精灵,则可以进入精灵编辑器中调整 打开精灵编辑器后按调整如下图所示的pivot选项,我在这里把精灵调整成了右上. 在精灵编辑 ...

  5. css3的新属性 新增的颜色--- 透明度---两种渐变---定义多张背景图--background-size

    css31==>颜色的6种表示的方法有6种表示颜色的方法 关键字 rgb rgba(css3) 16进制 hsl hsla hsla h=>是色相,值为360, s=>饱和度,0%- ...

  6. last.jenkins 其他 一些知识点

    时区不一致. jenkins的的时间和 系统时间不一致. 打开jenkins的[系统管理]---> [脚本命令行],在命令框中输入一下命令[时间时区设为 亚洲上海] System.setProp ...

  7. 乘积量化(Product Quantization)

    乘积量化 1.简介 乘积量化(PQ)算法是和VLAD算法是由法国INRIA实验室一同提出来的,为的是加快图像的检索速度,所以它是一种检索算法,在矢量量化(Vector Quantization,VQ) ...

  8. 2019CSP-J/S受虐记

    emmmm...... 今年noip很波折,我从7月开始准备 但CCF居然停了noip,这搞得我很迷茫,CCF你在干什么! 然后又恢复了,这有搞得我很懵逼?(还改名叫csp了) 就换了个名,CCF你搞 ...

  9. vscode源码分析【一】从源码运行vscode

    安装git,nodejs和yarn 安装Python27,3.x版本的不行,确保它在你的环境变量里: 安装gulp npm install --global gulp-cli 安装windows bu ...

  10. Nginx之负载均衡 :两台服务器均衡(填坑)

    第一步,两台服务器都要安装好Nginx和Tomcat,我这边的安装的是Nginx 1.16.1 Tomcat9: 第二步,安装完成之后,选择你要做均衡的那台服务器,,打开其Nginx 配置文件,在se ...