对于两个字符串$s$和$t$(保证其中每一种字符个数相同),定义$s$和$t$的相对逆序对数为$s$得到$t$的最少交换次数,显然同种字符相对顺序保持不变,因此即依次编号后的逆序对数

问题不妨看作构造合法字符串$t$使得$s$和$t$的相对逆序对数最小,定义$f_{S}(s)$为$s$仅保留$S$中的字符后所得到的字符串,那么有以下两个结论——

结论1:当$S=\{(,)\}$时,若$t$是使得$s$和$t$相对逆序对数最小的合法字符串,则$f_{S}(t)$也是使得$f_{S}(s)$和$f_{S}(t)$相对逆序对数最小的合法字符串

结论2:当$S=\{o,x\}$时,若$t$是使得$s$和$t$相对逆序对数最小的合法字符串,则$f_{S}(s)=f_{S}(t)$

由此,不妨先求出$S=\{(,)\}$时的$f_{S}(t)$,进而即将$o$和$x$从左到右依次插入,显然这可以用一个二维dp计算,条件为$x$之前左括号数严格大于右括号数,计算答案考虑逆序对数即可

时间复杂度为$o(n^{2})$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 8005
4 queue<int>q;
5 vector<int>vb,vc;
6 int n,cnt,ans,sum[N],f[N][N];
7 char s[N];
8 int main(){
9 scanf("%s",s+1);
10 n=strlen(s+1);
11 vb.push_back(0),vc.push_back(0);
12 for(int i=1;i<=n;i++){
13 if (s[i]=='('){
14 cnt++;
15 vb.push_back(i);
16 if (!q.empty()){
17 vb.push_back(q.front());
18 q.pop();
19 }
20 }
21 if (s[i]==')'){
22 cnt--;
23 if (cnt<0)q.push(i);
24 else vb.push_back(i);
25 }
26 if ((s[i]=='o')||(s[i]=='x'))vc.push_back(i);
27 }
28 for(int i=1;i<vb.size();i++){
29 sum[i]=sum[i-1];
30 if (s[vb[i]]=='(')sum[i]++;
31 else sum[i]--;
32 }
33 memset(f,0x3f,sizeof(f));
34 memset(f[0],0,sizeof(f[0]));
35 for(int i=1;i<vc.size();i++){
36 cnt=0;
37 for(int j=0;j<vb.size();j++)
38 if (vc[i]>vb[j])cnt++;
39 for(int j=0;j<vb.size();j++){
40 if (vc[i]<vb[j])cnt++;
41 else cnt--;
42 if ((s[vc[i]]=='o')||(sum[j]))f[i][j]=min(f[i][j],f[i-1][j]+cnt);
43 }
44 for(int j=1;j<vb.size();j++)f[i][j]=min(f[i][j],f[i][j-1]);
45 }
46 ans=0x3f3f3f3f;
47 for(int i=0;i<vb.size();i++)ans=min(ans,f[(int)vc.size()-1][i]);
48 for(int i=1;i<vb.size();i++)
49 for(int j=i+1;j<vb.size();j++)
50 if (vb[i]>vb[j])ans++;
51 printf("%d\n",ans);
52 return 0;
53 }

[atAGC054D]ox的更多相关文章

  1. Hrbust 2320 OX (博弈)

    题目链接  Hrbust 2320 用三进制来存储整个棋盘的状态. 设$dp[status][now]$为轮到$now$下棋的时候是必胜必败还是平局. 那么若当前能延伸出的所有状态中存在必败态的,则当 ...

  2. -oN ,-oX,-oG

    -oN ,正常输出 -oX, xml输出 nmap  192.168.9.12 -oX TEST.xml -oG grep输出 html文件可读性比xml文件要好,将xml转换成html     xs ...

  3. 哈理工OJ P2320:OX

    题目链接:OX 题意 :给出一个3X3的黑白棋棋盘,棋盘上有若干黑白子,再给出下一个下的人,问下一个下的人能否赢 分析:考虑到只有39种状态,故用一个数保存目前棋盘的状态,记为value,再枚举空位D ...

  4. OX中修改文件名

    右击文件,显示简介,名称与扩展名

  5. Mac OX上安装MongoDb

    MongoDB的安装有好多种安装方法,有普通青年的HomeBrew方式,也有文艺青年的源码编译方式.我只想快速的装起来用一下,所以我选最简单的HomeBrew. 请参考官方文档 : http://do ...

  6. Xcode与OX 版本对照表

    xcode1.0-xcode2.x 版本 OS X运行版本 OS X SDK(s) 1.0 OS X Panther(10.3.x) OS X Puma(10.1.x),OS X Jaguar(10. ...

  7. Mac OX 隐藏文件夹,文件,应用,磁盘的2种方法 hide finder folder, file, application, volume in 2 ways

    经常需要主目录下隐藏一些文件夹之类的, 第一想到的当然就是:在要隐藏的文件夹前面加『.』(leading dot),这个用法当然可以的了 用习惯了Linux/GNU系统的,基本习惯使用这种办法 但是, ...

  8. apache for mac OX S 10.10

    mac下如何针对 apache 设置虚拟目录呢?可能很多人都设置过,但也都不太会,每次都是网上找文章啥的.这里,我自己整理了一点,希望可以帮到大家. 还原 httpd.conf 配置文件 如果,你现在 ...

  9. MAC OX 配置JDK环境变量

    大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...

随机推荐

  1. RAC使用auto rolling的方式打补丁

    11.2.0.4 RAC 某系统主库使用auto rolling的方式打补丁在一节点执行1-5,结束后然后在二节点执行1-5,结束后最后再在某个节点执行6. 1.backup GI_HOME& ...

  2. Zookeeper 集群部署的那些事儿

    简介 额...., &*$% 淘气! ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务. ZooKeeper本质上是一个分布式的小文件存储系统 ...

  3. 题解 2020.10.24 考试 T4 模板

    题目传送门 题目大意 有一个 \(n\) 个点组成的树,有 \(m\) 次操作,每次将 \(1\to x\) 的路径上每个点都加入一个颜色为 \(c\) 的小球.但是每个点都有大小限制,即小球个数超过 ...

  4. PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)

    1086 就不告诉你 (15分) 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定的 ...

  5. Apache Shiro漏洞绕过waf小tips

    看了篇文章觉得不错记录下以免以后找不到,原理是通过base64解码特性导致waf不能成功解码绕过waf检测从而进行攻击 解码情况: payload php python openresty java ...

  6. XSS_Labs靶场通关

    XSS-labs靶场(1-20) 开始通关!   0x01 (直接漏洞注入) 反射型xss注入 1.遇到?name=text,尝试参数注入 注入语句: <script>alert('xss ...

  7. leetcode 5/300 最长回文子串 py

    目录 题目说明 方法一:动态规划--状态转移方程 方法二:优化中心扩展算法 题目说明 要看明白求得是什么,最长回文字串是指例如cababa中ababa是最长的,不是求回文的部分aba 方法一:动态规划 ...

  8. Java:LinkedList类小记

    Java:LinkedList类小记 对 Java 中的 LinkedList类,做一个微不足道的小小小小记 概述 java.util.LinkedList 集合数据存储的结构是循环双向链表结构.方便 ...

  9. 嵌入式物联网之SPI接口原理与配置

    本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...

  10. Python中的括号()、[]、{}

    长时间不用容易混淆,仅记! 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{} . Python中的小括号(): 代表tuple元祖数据类型,元祖是一种不可变序列.大多 ...