题目传送门

题意:

给定一个括号序列,随意交换两个位置的括号之后,问有多少个不同长度的圈。关于圈的定义大概就是:将括号序列的后$k$个数放到括号序列的最前面,就是长度为$k$的圈。(看了好久题意emmm...)

分析:

首先,我们可以$n^2$暴力枚举交换的位置,然后再看有多少个圈。

然后,对于括号序列的正确性判断,有一个非常巧妙的方法,(只适用于只有一种括号,既有小括号,又有中括号是不得行的):

给$"("$赋值为1,$")"$赋值为-1,计算这个序列的前缀和,只要保证前缀和的每一位都大于等于0,并且最后一位刚好等于0,这个序列就是正确的括号序列。

然后再枚举一个$k$,也就是圈的长度。要判断这个$k$成不成立,也就是要保证变换之后的前缀和每一个都要大于等于0。

根据数学课上老师的传授,这是一个恒成立问题,我们只需要让最小的那个数在变换之后大于等于0就可以了。

用一个前缀最小值和后缀最小值,$m1[k]$表示$1~k$的最小值,$m2[k]$表示$k~n$的最小值,在变换之后,如果$m1[k]+(a[n]-a[i])>=0$&&$m2[k+1]-a[i]>=0$,那么就符合条件。

 #include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
#define N 505
#define ll long long
#define INF 0x3f3f3f3f
int n,ans,l,r;
char s[N];
int a[N]/*前缀和*/,min1[N]/*前缀最小值*/,min2[N]/*后缀最小值*/;
void swp(int i,int j)
{
char tmp=s[i];
s[i]=s[j],s[j]=tmp;
}
int f()
{
int res=;
for(int i=;i<=n;i++)
{
if(s[i]=='(') a[i]=a[i-]+;
if(s[i]==')') a[i]=a[i-]-;
min1[i]=min2[i]=INF;
min1[i]=min(min1[i-],a[i]);
}
for(int i=n;i>=;i--)
min2[i]=min(min2[i+],a[i]);
if(min1[n]>=&&a[n]==) res++;//不进行轮换就已经是正确的序列
for(int i=;i<n;i++)//从i和i+1之间断开
if(min2[i+]-a[i]>=&&min1[i]+(a[n]-a[i])>=&&a[n]==)
res++;
return res;
//程序一开始的时候就判断了a[n]!=0的情况 所以这里不写其实也可以
}
int main()
{
scanf("%d",&n);
scanf("%s",s+);
int cnt1=,cnt2=;
for(int i=;i<=n;i++)
{
if(s[i]=='(') cnt1++;
else cnt2++;
}
if(cnt1!=cnt2)
{
puts("0\n1 1");
return ;
}
ans=f(),l=,r=;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
if(s[i]==s[j]) continue;
swp(i,j);
int res=f();
if(ans<res) ans=res,l=i,r=j;
swp(i,j);
}
printf("%d\n%d %d\n",ans,l,r);
return ;
}

Code

CF The World Is Just a Programming Task (Easy Version)【分析·思维】的更多相关文章

  1. Codeforces Round #594 (Div. 1) D2. The World Is Just a Programming Task (Hard Version) 括号序列 思维

    D2. The World Is Just a Programming Task (Hard Version) This is a harder version of the problem. In ...

  2. [cf 1239 B] The World Is Just a Programming Task (Hard Version)

    题意: 给你一个长度为n的括号序列,你可以交换其中的两个元素,需要使该序列的n个循环移位中合法的括号序列个数尽量多. 输出最大的答案以及交换哪两个元素能够取到这个答案. $n\leq 3\times ...

  3. Codeforces 1239B. The World Is Just a Programming Task (Hard Version)

    传送门 这一题好妙啊 首先把括号序列转化成平面直角坐标系 $xOy$ 上的折线,初始时折线从坐标系原点 $(0,0)$ 出发 如果第 $i$ 个位置是 '(' 那么折线就往上走一步($y+1$),否则 ...

  4. CF #579 (Div. 3) D1.Remove the Substring (easy version)

    D1.Remove the Substring (easy version) time limit per test2 seconds memory limit per test256 megabyt ...

  5. 并不对劲的CF1239B&C&D Programming Task in the Train to Catowice City

    CF1239B The World Is Just a Programming Task 题目描述 定义一个括号序列s是优秀的,当且仅当它是以下几种情况的一种: 1.|s|=0 2.s='('+t+' ...

  6. codeforces#1248D2. The World Is Just a Programming Task(括号匹配转化为折线处理)

    题目链接: http://codeforces.com/contest/1248/problem/D2 题意: 可以执行一次字符交换的操作 使得操作后的字符串,循环移位并且成功匹配的方案最多 输出最多 ...

  7. Codeforces Round #594 (Div. 2) D1 - The World Is Just a Programming Task

    思路:枚举换的位置i,j 然后我们要先判断改序列能否完全匹配 如果可以 那我们就需要把差值最大的位置换过来 然后直接判断就行

  8. Codeforces Round #594 (Div. 2) D1 - The World Is Just a Programming Task (贪心)

    思路:枚举换的位置i,j 然后我们要先判断改序列能否完全匹配 如果可以 那我们就需要把差值最大的位置换过来 然后直接判断就行

  9. hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

    题目链接 题意:给定一个数组记录两队之间分差,只记分差,不记谁高谁低,问最终有多少种比分的可能性 分析: 类似cf的题目,比赛的时候都没想出来,简直笨到极点..... 最后的差确定,只需要计算和的种类 ...

随机推荐

  1. PHP商城的搜索功能

    大家好,今天分享一个商城的搜索功能,建立在上一篇文章的基础上实现的. 搜索功能简单的说就是通过sql语句在数据库中实现模糊查找 连接数据库,实现分页功能(可以参考上一篇文章) 定义一个变量接收传过来的 ...

  2. Visual Studio开发首选!DevExtreme v19.1.6全新来袭

    DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...

  3. k8spod生命周期

    pod对象自从创建开始至终止退出的时间范围称为生命周期,在这段时间中,pod会处于多种不同的状态,并执行一些操作:其中,创建主容器为必须的操作,其他可选的操作还包括运行初始化容器(init conta ...

  4. [Atcoder2292] Division into Two

    题目大意 给定n个不同的整数,求将它们分成两个集合X,Y,并且X集合中任意两个数的差>=A,Y集合中任意两个数的差>=B的方案数. 样例输入 5 3 7 1 3 6 9 12 样例输出 5 ...

  5. vue的组件创建和使用

    首先说一下vue组件 什么是组件? 在我的理解,vue的所有页面内容都是组件. 什么是父子组件? 因为所有的页面内容都是组件,那么怎么区分父子组件呢?其实很简单,现在有一个页面,在js里面的 comp ...

  6. shell学习——关于shell函数库的使用

    shell函数库的理解: 个人理解,shell函数库实质为一个脚本,脚本内包含了多个函数(函数具有普遍适用性). shell函数库的调用: 通过  . /path/lib/file.lib 或者 so ...

  7. python 正则表达式实例:

    #!/usr/bin/python import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.* ...

  8. TTTTTTTTTTTTTTTT POJ 2723 楼层里救朋友 2-SAT+二分

    Get Luffy Out Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8211   Accepted: 3162 Des ...

  9. Linux服务器pxe+kickstart部署无人值守安装

    一.    使用光盘镜像安装好一台Redhat6.8系统的虚拟机(图形化界面) 二.    部署相关服务程序 1.     安装并配置dhcpd服务程序 a)安装dhcp服务程序 b)对dhcp服务进 ...

  10. 17.Python print()函数高级用法

    前面使用 print() 函数时,都只输出了一个变量,但实际上 print() 函数完全可以同时输出多个变量,而且它具有更多丰富的功能. print() 函数的详细语法格式如下: print (val ...