arc 097 E - Sorted and Sorted
E - Sorted and Sorted
Time limit : 2sec / Memory limit : 1024MB
Score : 600 points
Problem Statement
There are 2N balls, N white and N black, arranged in a row. The integers from 1 through N are written on the white balls, one on each ball, and they are also written on the black balls, one on each ball. The integer written on the i-th ball from the left (1 ≤ i ≤ 2N) is ai, and the color of this ball is represented by a letter ci. ci = W represents the ball is white; ci = B represents the ball is black.
Takahashi the human wants to achieve the following objective:
- For every pair of integers (i,j) such that 1 ≤ i < j ≤ N, the white ball with i written on it is to the left of the white ball with j written on it.
- For every pair of integers (i,j) such that 1 ≤ i < j ≤ N, the black ball with i written on it is to the left of the black ball with j written on it.
In order to achieve this, he can perform the following operation:
- Swap two adjacent balls.
Find the minimum number of operations required to achieve the objective.
Constraints
- 1 ≤ N ≤ 2000
- 1 ≤ ai ≤ N
- ci =
Wor ci =B. - If i ≠ j, (ai,ci) ≠ (aj,cj).
Input
Input is given from Standard Input in the following format:
N
c1 a1
c2 a2
:
c2N a2N
Output
Print the minimum number of operations required to achieve the objective.
Sample Input 1
3
B 1
W 2
B 3
W 1
W 3
B 2
Sample Output 1
4
The objective can be achieved in four operations, for example, as follows:
- Swap the black 3 and white 1.
- Swap the white 1 and white 2.
- Swap the black 3 and white 3.
- Swap the black 3 and black 2.
Sample Input 2
4
B 4
W 4
B 3
W 3
B 2
W 2
B 1
W 1
Sample Output 2
18
Sample Input 3
9
W 3
B 1
B 4
W 1
B 5
W 9
W 2
B 6
W 5
B 3
W 8
B 9
W 7
B 2
B 8
W 4
W 6
B 7
Sample Output 3
41
https://arc097.contest.atcoder.jp/tasks/arc097_c
dp[i][j]表示前(i + j)个有 i 个白的,j 个黑的,都已经排好序的代价
dpi,j = min(dp[ i − 1 ][ j ] + cost,dp[ i ][ j - 1 ] + cost)
cost是原来位置移到第(i + j)个的代价,即这段中的逆序对个数,树状数组维护即可
#include<bits/stdc++.h>
typedef long long ll ;
#define rep(i, a, b) for (int i = a; i <= b; ++i)
using namespace std; const int MAXN = ;
const ll INF = 2e9;
int n;
int dp[MAXN][MAXN];
int a[MAXN + MAXN], c[MAXN + MAXN];
int p1[MAXN], p0[MAXN];
int t[MAXN + MAXN]; void add (int k, int d) { while (k <= n + n) { t[k] += d; k += k & -k; } }
int sum (int k) { int s = ; while (k > ) { s += t[k]; k -= k & -k; } return s; } int main() {
cin >> n;
rep(i, , n + n) {
char ch;
cin >> ch >> a[i];
if (ch == 'W') {
p0[a[i]] = i;
c[i] = ;
}
else {
p1[a[i]] = i;
c[i] = ;
}
add(i, );
}
p1[] = n + n + ;
p0[] = n + n + ;
dp[][] = ;
rep(j, , n) {
add(p1[j], -);
dp[][j] = dp[][j - ] + sum(p1[j] - );
}
rep(j, , n) add(p1[j], );
rep(i, , n) {
add(p0[i], -);
rep(j, , n) {
add(p1[j], -);
dp[i][j] = INF;
if (i) dp[i][j] = min(dp[i][j], dp[i - ][j] + sum(p0[i] - ));
if (j) dp[i][j] = min(dp[i][j], dp[i][j - ] + sum(p1[j] - ));
}
rep(j, , n) add(p1[j], );
}
cout << dp[n][n] << "\n";
return ;
}
arc 097 E - Sorted and Sorted的更多相关文章
- python中sorted和.sorted 、reversed和reverse的注意点
L=[1,2,3,4]l1=[123,123,23]if l1.sort() == L.reverse(): #这个判断式是恒等的,因为两个函数的返回值都是None(其实是无返回值) pri ...
- 【AtCoder】 ARC 097
link C-K-th Substring 题意:找出已知串中第\(k\)大的子串,子串相同的不算 \(k\)好小啊,要怎么做啊 不是[Tjoi2015]弦论吗 算了,直接SAM吧 #include& ...
- python中sorted和sorted 、reversed和reverse的使用。
#encoding = utf-8 list = [1,8,3,6] print(list.sort()) #None print(list) #[1,3,6,8] print(sorted(list ...
- AtCoder ARC097C Sorted and Sorted:dp
传送门 题意 有 $ 2n $ 个球排成一行,其中恰好有 $ n $ 个白球和 $ n $ 个黑球.每个球上写着数字,其中白球上的数字的并集为 $ \lbrace 1 \dots n\rbrace $ ...
- ARC097E Sorted and Sorted
传送门 题目 There are 2N balls, N white and N black, arranged in a row. The integers from 1 through N are ...
- python 中 sorted() 和 list.sort() 的用法
今天用python自带的sorted对一个列表进行排序, 在这里总结一下 只要是可迭代对象都可以用sorted . sorted(itrearble, cmp=None, key=None, reve ...
- python 排序sorted
num = [3,2,4,6,5] anum = sorted(num) dnum = sorted(num,reverse=True) print '升序:',anum # 升序: [2, 3, 4 ...
- Redis in .NET Core 入门:(5) Sorted SET
第1篇:https://www.cnblogs.com/cgzl/p/10294175.html 第2篇 String:https://www.cnblogs.com/cgzl/p/10297565. ...
- Redis实战 - 2.list、set和Sorted Set
List Redis的List是通过Linked List(链表)来实现的String集合,所以插入数据的速度很快. 但是缺点就是在数据量比较大的时候,访问某个数据的时间可能会很长,但针对这种情况,可 ...
随机推荐
- s21day22 python笔记
s21day22 python笔记 一.内容回顾及补充 模块补充 importlib.import_module:通过字符串的形式导入模块 #示例一: import importlib # 用字符串的 ...
- JAVA第九次作业
JAVA第九次作业 (一)学习总结 1.用思维导图对javaIO操作的学习内容进行总结. 参考资料: XMind. 2.下面的程序实现了文件的拷贝,但采用的是一个字节一个字节的读写方式,效率很低.使用 ...
- 常用socket选项
1.socket选项通常:服务端应在listen 前设置,accpet返回的socket继承自监听套接字. 客户端应在connect之前设置 2.socket 如果有大量短连接应设置SO_LINGER ...
- matplot画图kill问题,形成思路
很多小伙伴刚学matplot的时候 看着代码就想敲 可是你应该现有概念啊 熟悉这两个再看下面的代码,下面的解决了一些人问中文字体的问题,满足了一般人的设置需求 代码注释很详细,我就不多哔哔了. 完全 ...
- 《构建之法》chapter5,6 读书心得
<构建之法>第五章用体育运动等团队例子引出软件开发团队的形式,用更加生活化.形象化的例子让读者更能理解软件开发团队的形式.软件团队形式多样,适用于不同的人员与需求.团队可能会演变的模式有: ...
- javaee设计模型简介
(一)五种模式 1.单例模式 在某些情况下,有些对象只需要一个就可以了,即每个类只需要一个实例.例如,一台计算机上的可以连接多台打印机,但是该计算机上的打印程序只能有一个,这里就可以通过单例模式来避免 ...
- 《大型网站系统与Java中间件实现》有感
头一次只用了一周的时间就看完一本书<大型网站系统与Java中间件实现>,这本书是关于设计方面的,提到了服务框架,消息中间件,数据访问层,以及如何解决应用之间的调用,解耦,以及应用和存储之间 ...
- AJAX实现登陆
先添加点击事件 <input type="button" id="submitt" value="立即登录" /> 展示信息 & ...
- cmd常用命令总结
1.cmd不同盘符之间切换 方法(1): cd /d 路径如:cd /d c:/windows 方法(2): d:2.cls 清空cmd窗口dir 查看文件夹下的目录md 创建文件夹rd 删除文件夹c ...
- ubuntu中连接mssql数据库sqlserver
参考文章 https://blog.csdn.net/fangaoxin/article/details/5386149 (感谢作者) sudo apt-get install tdsodbc sud ...