[cf 1239 B] The World Is Just a Programming Task (Hard Version)
题意:
给你一个长度为n的括号序列,你可以交换其中的两个元素,需要使该序列的n个循环移位中合法的括号序列个数尽量多。
输出最大的答案以及交换哪两个元素能够取到这个答案。
$n\leq 3\times 10^5$。
题解:
这位julao讲得很清楚。
这个题值得学习的地方就是把括号序列转化成平面直角坐标系上的折线再进行判断。
将右括号视作-1,左括号视作+1,$sum_{i}$为$1-i$的前缀和,那么一个括号序列合法当且仅当:
1.不存在$i$满足$sum_{i}<0$;
2.$sum_{n}=0$。
容易发现这样判断比用栈模拟适用性广而且扩展性强。
本题中转化序列后使用线段树即可,我使用了一种线性做法。
代码:
#include<bits/stdc++.h>
#define maxn 300005
#define maxm 500005
#define inf 0x7fffffff
#define ll long long using namespace std;
int N,sum[maxn]; char str[maxn<<]; inline int read(){
int x=,f=; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
} int main(){
N=read(),scanf("%s",str+);
int pos=,mn=inf;
for(int i=;i<=N;i++) str[i+N]=str[i];
for(int i=;i<=N;i++){
sum[i]=sum[i-]+((str[i]==')')?-:);
if(sum[i]<mn) mn=sum[i],pos=i;
}
for(int i=pos+;i<=pos+N;i++)
sum[i-pos]=sum[i-pos-]+((str[i]==')')?-:);
if(sum[N]!=){printf("0\n1 1\n");return ;}
int ans=,mxans=,p1=,p2=;
for(int i=;i<=N;i++)
if(sum[i]==) ans++;
for(int i=;i<=N;){
int j=i; while(j<=N && sum[j+]!=) j++; j++;
int n1=,n2=,t1=,t2=,mxn2=,las1=i;
for(int k=i;k<=j;k++){
if(sum[k]==){
if(mxn2<n2) mxn2=n2,t1=las1+,t2=k;
n2=,n1++,las1=k;
}
if(sum[k]==) n2++;
}
if(mxn2<n2) mxn2=n2,t1=las1+,t2=j;
if(mxans<mxn2+ans) mxans=mxn2+ans,p1=t1,p2=t2;
if(mxans<n1) mxans=n1,p1=i,p2=j; i=j+;
}
//cout<<p1<<" "<<p2<<endl;
printf("%d\n%d %d\n",mxans,(p1+pos-)%N+,(p2+pos-)%N+);
return ;
}
B
[cf 1239 B] The World Is Just a Programming Task (Hard Version)的更多相关文章
- CF The World Is Just a Programming Task (Easy Version)【分析·思维】
题目传送门 题意: 给定一个括号序列,随意交换两个位置的括号之后,问有多少个不同长度的圈.关于圈的定义大概就是:将括号序列的后$k$个数放到括号序列的最前面,就是长度为$k$的圈.(看了好久题意emm ...
- 一句话CF
目录 \(\bf {Round \ \#500 \ (Div. \ 1)}\) \(\bf {Round \ \#589 \ (Div. \ 2)}\) \(\bf {Avito \ Cool \ C ...
- Codeforces Round #594 (Div. 1)
Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...
- cf 之lis+贪心+思维+并查集
https://codeforces.com/contest/1257/problem/E 题意:有三个集合集合里面的数字可以随意变换位置,不同集合的数字,如从第一个A集合取一个数字到B集合那操作数+ ...
- HBase 数据模型(Data Model)
HBase Data Model--HBase 数据模型(翻译) 在HBase中,数据是存储在有行有列的表格中.这是与关系型数据库重复的术语,并不是有用的类比.相反,HBase可以被认为是一个多维度的 ...
- IOS - Foundation和Core Foundation掺杂使用桥接
Foundation和Core Foundation掺杂使用桥接 Toll-Free Bridging 在cocoa application的应用中,我们有时会使用Core Foundation(CF ...
- Cloud Foundry v2 部署及入门运维
之前写过一个Guide for Cloud Foundry New Teamer.不过似乎已经有些过时,那会实验室主要是针对的CF v1进行的研究,现在已经全面进入V2时代了.所以更新一下关于Clou ...
- USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- MC9S08JS16
Introduction The attached files provide a port of a combined TBDML/OSBDM code to a MC9S08JS16 proces ...
- Github上的1000多本免费电子书重磅来袭!
Github上的1000多本免费电子书重磅来袭! 以前 StackOverFlow 也给出了一个免费电子书列表,现在在Github上可以看到时刻保持更新的列表了. 瞥一眼下面的书籍分类目录,你就能 ...
随机推荐
- JS回调函数怎么写的?
相信每个做前端的同学都用过太多太多的回调函数, 接下来就看看回调函数是怎么来的. 这玩意儿也没那么神秘,直接看代码: 声明函数的时候,把回调函数用作参数,并且在函数内调用它 function getD ...
- [WEB安全]源码泄露总结
原文链接:https://blog.csdn.net/qq_36869808/article/details/88895109 源码泄露总结: svn源码泄露:https://blog.csdn.ne ...
- R 语言中的数据结构
基本数据类型 6种 numaric 如 12, 12.4 integer 如 2L,0L complex 包含实数和虚数 如 3+2i character 要用双引号或者单引号包括起来 如 & ...
- 使用gdb调试段错误
[https://blog.csdn.net/xj9120/article/details/91380074] 1.bt 2.frame number 3.一般是内存问题 4.kill
- 假如 Redis Cluster 模式用在 T-io 上
前言 前几天在学习Redis Cluster 模式的时候,突然想到如果把它的集群模式应用在T-io上也是挺有意思的一件事情. Redis 集群简介 Redis Cluster 中有 N 台实 ...
- Cesium中导入三维模型方法(dae到glft/bgltf)[转]
Cesium中导入三维模型方法(dae到glft/bgltf) Cesium中目前支持gltf和bgltf两种格式.“gltf是khronos组织(起草OpenGL标准的那家)定义的一种交换格式,用于 ...
- 根据motif binding来确定target gene | HOMER | FIMO | MEME
主流的motif数据库 JASPAR dbcorrdb - SCENIC使用的 TRANSFAC® 7.0 Public 2005 and TRANSCompel 7.0 Public 2005 - ...
- bitcoinjs-lib 哈希交易之多笔交易合并。
转账的时候需要手动寻找每一笔未花费记录实在太费时. 比特币转账需要提取或合并所有未花费的交易中的比特币,才能实现交易. import * as bitcoin from 'bitcoinjs-lib' ...
- mac 下面用dd 制作u盘启动
用dd来把安装包烧到U盘的,发现U盘变小了,mac磁盘工具也不能格式化,就只好用命令行了.diskutil list #1.找到U盘的代号 比如disk1diskutil unmountDisk /d ...
- php laravel 环境搭建
最近上一个新项目,时间比较紧,为了满足业务需求,没有办法,只有上我大 php 了,找了一个带些基础的数据结构,用的是 laravel 搭建的,然后寻坑就开始了,先是构建 docker 镜像就坑了,然后 ...