#P5749. [IOI2019] 排列鞋子
[IOI2019] 排列鞋子
题目描述
由于洛谷数据点限制,本题仅评测其中的 个数据点。
如果需要测试全部数据,有以下两道题:
两题满分均为 分,包含 Subtask中所有的测试点。
Adnan 拥有巴库最大的鞋店。现在有一个装着 双鞋的箱子刚运到他的鞋店。每双鞋是大小相同的两只:一只左脚,一只右脚。Adnan 把这 只鞋排成一行,该行总共有 个位置,从左到右编号为 到 。
Adnan 想把这些鞋子重新排成合法的排列。一个排列是合法的,当且仅当对于所有的 ,以下条件都成立:
- 在位置 和 上的鞋子大小相同;
- 在位置 上的鞋子是一只左脚鞋;
- 在位置 上的鞋子是一只右脚鞋。
为实现上述目标,Adnan 可以做一系列对调。在每次对调中,他选择当前相邻的两只鞋进行对调(也就是把它们拿起来,然后将每只鞋子放回到另一只鞋子原来的位置上)。两只鞋子是相邻的,当且仅当其位置编号的差为 。
请求出 Adnan 最少要做出多少次对调,才能得到一个合法排列。
输入格式
第一行一个正整数 ,表示有 双鞋。
第二行 个整数 ,第 个整数表示位置编号为 的鞋子。其中 ,等于最初在位置 上的鞋子的大小。这里 表示 的绝对值,当 时等于 ,当 时等于 。如果 ,则 位置上的鞋子是一只左脚鞋,否则是右脚鞋。
输出格式
输出一行一个整数,表示最少对调次数。
2
2 1 -1 -2
4
3
-2 2 2 -2 -2 2
1
提示
样例说明 1
Adnan 可以通过 次对调而得到一个合法的排列。
例如,他可以先对调 和 ,再对调 和 ,再对调 和 。最后对调 和 。随后他就可以得到合法的排列 。无法用少于 次对调就得到合法的排列,因此输出 。
样例说明 2
Adnan 可以对调在位置 和 上的鞋子来得到合法的排列,因此应当输出 。
数据范围
对于所有数据:
- ;
- 对于所有,都有;
- 总有某个合法的排列可以经由一系列对调而得到。
详细子任务附加限制与分值如下表:
子任务编号 | 附加限制 | 分值 |
---|---|---|
所有鞋子大小都是相同的 | ||
所有在位置 上的鞋都是左脚鞋,而在位置 上的鞋都是右脚鞋。而且对于所有 ,在位置 和 上的鞋子大小相同 | ||
无附加限制 |