传送门 这一题好妙啊 首先把括号序列转化成平面直角坐标系 $xOy$ 上的折线,初始时折线从坐标系原点 $(0,0)$ 出发 如果第 $i$ 个位置是 '(' 那么折线就往上走一步($y+1$),否则往下走一步 ($y-1$) 这条折线有很多有用的性质 $1.$如果某个时刻折线的纵坐标为负数了,那么说明这个括号序列一定是不合法的 证明也挺好理解的,变成负数说明没有足够的 '(' 和 ')' 匹配了,显然不合法 $2.$如果最终位置 $n$ 的折线 $y$ 坐标不为 $0$ ,那么一定不合法,因为…
D2. The World Is Just a Programming Task (Hard Version) This is a harder version of the problem. In this version,…
题目链接: http://codeforces.com/contest/1248/problem/D2 题意: 可以执行一次字符交换的操作 使得操作后的字符串,循环移位并且成功匹配的方案最多 输出最多的方案数和交换的位置 数据范围: $1\leq n \leq 300 000$ 分析: 参考博客:https://www.cnblogs.com/LLTYYC/p/11718968.html 对于一个字符串,求它的循环移位匹配方案数 可以把字符串转换成折线,从0开始,遇到(则加一,遇到)则减一 如果…
题意: 给你一个长度为n的括号序列,你可以交换其中的两个元素,需要使该序列的n个循环移位中合法的括号序列个数尽量多. 输出最大的答案以及交换哪两个元素能够取到这个答案. $n\leq 3\times 10^5$. 题解: 这位julao讲得很清楚. 这个题值得学习的地方就是把括号序列转化成平面直角坐标系上的折线再进行判断. 将右括号视作-1,左括号视作+1,$sum_{i}$为$1-i$的前缀和,那么一个括号序列合法当且仅当: 1.不存在$i$满足$sum_{i}<0$: 2.$sum_{n}=…
题目传送门 题意: 给定一个括号序列,随意交换两个位置的括号之后,问有多少个不同长度的圈.关于圈的定义大概就是:将括号序列的后$k$个数放到括号序列的最前面,就是长度为$k$的圈.(看了好久题意emmm...) 分析: 首先,我们可以$n^2$暴力枚举交换的位置,然后再看有多少个圈. 然后,对于括号序列的正确性判断,有一个非常巧妙的方法,(只适用于只有一种括号,既有小括号,又有中括号是不得行的): 给$"("$赋值为1,$")"$赋值为-1,计算这个序列的前缀和,只…
E. A Simple Task 题目连接: http://www.codeforces.com/contest/558/problem/E Description This task is very simple. Given a string S of length n and q queries each query is on the format i j k which means sort the substring consisting of the characters from…
CF1239B The World Is Just a Programming Task 题目描述 定义一个括号序列s是优秀的,当且仅当它是以下几种情况的一种: 1.|s|=0 2.s='('+t+')',其中t是优秀的 3.s=t1+t2,其中t1.t2都是优秀的 一个括号序列的价值为将它看成一个循环串,从多少个位置切开,能切出循环串. 给出一个长度为\(n\)的括号序列,你可以交换其中两个位置的括号(这两个位置可以相等),问最大价值及方案. 输出任意一种方案均正确.\(n\leq 3\tim…
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Tonio has a keyboard with only two letters, "V" and "K". One day, he has typed out a string s with only t…
这个题真的是超级超级水啊,哈哈哈哈哈哈.不要被题面吓到,emnnn,就这样... 代码: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 int main(){ 7 int n,m; 8 int t; 9 scanf("%d",&t); 10 while(t--){…
思路:枚举换的位置i,j 然后我们要先判断改序列能否完全匹配 如果可以 那我们就需要把差值最大的位置换过来 然后直接判断就行…