CodeForces - 1248D1 (思维+暴力)
题意
有一个括号序列,你可以选择两个位置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 (思维+暴力)的更多相关文章
- codeforces 768 C. Jon Snow and his Favourite Number(思维+暴力)
题目链接:http://codeforces.com/contest/768/problem/C 题意:给出n个数,k个操作,和一个x,每次操作先排序然后对奇数位数进行xor x操作,最后问k次操作后 ...
- CodeForces - 1244D (思维+暴力)
题意 https://vjudge.net/problem/CodeForces-1244D 有一棵树,有3种颜色,第i个节点染成第j种颜色的代价是c(i,j),现在要你求出一种染色方案,使得总代价最 ...
- Nice Garland CodeForces - 1108C (思维+暴力)
You have a garland consisting of nn lamps. Each lamp is colored red, green or blue. The color of the ...
- CodeForces - 593A -2Char(思维+暴力枚举)
Andrew often reads articles in his favorite magazine 2Char. The main feature of these articles is th ...
- CodeForces - 1230C(思维/暴力)
题意 https://vjudge.net/problem/CodeForces-1230C 给了你总共有21张多米诺骨牌,每张牌有两个面,然后给你一个无向图,保证没有环和一个顶点多条边的情况存在.现 ...
- CodeForces - 1228D (暴力+思维+乱搞)
题意 https://vjudge.net/problem/CodeForces-1228D 有一个n个顶点m条边的无向图,在一对顶点中最多有一条边. 设v1,v2是两个不相交的非空子集,当满足以下条 ...
- Nikita and string [思维-暴力] ACM
codeforces Nikita and string time limit per test 2 seconds memory limit per test 256 megabytes O ...
- 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 ...
- Chladni Figure CodeForces - 1162D (暴力,真香啊~)
Chladni Figure CodeForces - 1162D Inaka has a disc, the circumference of which is nn units. The circ ...
随机推荐
- iptables 从入门到应用
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://powermichael.blog.51cto.com/12450987/1952 ...
- rdd里的foreach无法对外界产生影响
rdd只能用Map返回结果.里面的操作对外界毫无影响 因为rdd是分区进行的,都是各个位置的操作,所以为保证数据没有问题,其中的数据对外界操作没有影响 想要有影响,就将rdd.collect()实例化 ...
- 使用Anaconda3的Docker镜像
假设本地 Ubuntu 服务器已经安装好了Docker,这里讲述一下如何开始运行Anaconda3的Docker镜像: 1. 搜索镜像 搜索我们想要的anaconda镜像: docker search ...
- jstree级联禁用后代节点的选择框
用jstree+jquery,做的树形展示. 这个话题,在Stack Overflow上有问答,要获取要禁用的节点,然后用获取子节点方法遍历后代节点,设置禁用选择框. 之后发现,jstree的获取子节 ...
- day87_11_7微信小程序之登录,支付(获取ip,requests使用),授权
一.登录接口. 官方文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 在登录接口 ...
- Flask/Tornado/Django
深入学习Python ,用Django做Web后端开发现在Python的用途愈来愈广,服务器.Web.游戏.爬虫.数据分析 以及人工智能 学习之路还很长 技术之路 不能回头 陷进去 就出不来 就跟恋 ...
- C++内置二分查找用法
c++内置二分查找 #include < algorithm > 一.binary_search:查找某个元素是否出现.函数模板:binary_search(arr[], arr[]+si ...
- 【TCP/IP网络编程】:02套接字类型与协议设置
本篇文章主要介绍创建套接字函数相关的3个输入参数的含义,它们最终确定了套接字通信所采用的协议.同时,也简单对比了TCP和UDP传输方式的区别. 什么是协议?协议是对话中使用的通信规则,而在计算机领域则 ...
- 【Linux命令】文件目录管理命令7个(touch、mkdir、cp、mv、rm、dd、file)
目录 touch创建空白文档或设置文件时间 mkdir创建空白目录 cp复制文件或目录 mv剪切文件或重命名文件 rm删除文件或目录 dd按照指定大小和个数的数据库来复制文件或转换文件 file查看文 ...
- JeeSite | 保存信息修改记录
需求点 在很多场景中信息是不能轻易被修改的,修改时要么需要具备权限,要么需要审批,但是无论是哪种方式,修改前后的数据都是需要留有“案底”的,也就是说关键的信息被修改后是有修改记录的,一般修改记录会记录 ...