CF2052A.Adrenaline Rush
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
爱丽丝的朋友是肾上腺素飙升赛车比赛的狂热爱好者,总是努力参加每一场比赛。然而,这一次,爱丽丝是观看比赛的人。为了确保她的朋友不会错过任何重要的细节,爱丽丝决定记下赛道上发生的每一件事。
比赛开始前,爱丽丝注意到的第一件事是汽车的编号。所有的汽车都按照特定的顺序在起跑线前排成一列。最靠近这条线的车编号为 1,第二辆车编号为 2,以此类推,直到最后一辆车编号为 n。多方便啊!爱丽丝想。
比赛开始倒计时:“三!二!一!出发!”。爱丽丝注意到汽车是按原来的顺序出发的。然而,随着比赛的进行,他们的顺序发生了变化。每当一辆车超越另一辆车时,她都会记录下来,本质上就是在赛道上与它交换位置。
在比赛中,爱丽丝注意到一件奇怪的事情:没有一辆车超过另一辆车一次以上。换句话说,对于任意两辆车 x 和 y,在比赛中它们之间最多有两次超车:“x 超过 y”和/或“y 超过 x”。
在比赛结束时,爱丽丝仔细地写下汽车 c1,c2,…,cn 的最终顺序,其中 c1 代表比赛的获胜者。
然而,爱丽丝的朋友只对最终的排名感兴趣,并丢弃了爱丽丝的所有笔记,除了最终的顺序。爱丽丝很好奇,她想知道:她在比赛中观察到的最长超车次数是多少?你的任务是帮助爱丽丝回答这个问题。
输入格式
输入的第一行包含一个整数 n(1≤n≤1000),用于表示比赛中的汽车数量。
第二行包含一个排列 c1,c2,…,cn(1≤ci≤n,ci=cj) 用于表示汽车的最终顺序。
输出格式
输出的第一行应该包含一个整数 m,用于表示在比赛中可能出现的最大超车次数。
接下来的 m 行中的每一行都包含两个整数 x 和 y(1≤x,y≤n,x=y),表示超车事件,其中汽车 x 超过了汽车 y。这意味着汽车 x 正好在汽车 y 后面,并超过了它。超车必须按照比赛中发生的顺序排列。
在所有的 m 次超车之后,汽车必须按照 c1,c2,…,cn的顺序到达终点线。注意,任何汽车 x 都不应超过另一辆汽车 y 一次以上。
如果存在多个可能的最长超车序列,则输出其中任何一个。
——By hyacinth_lpy.
输入输出样例
输入#1
3 2 3 1
输出#1
4 2 1 3 1 3 2 2 3
输入#2
1 1
输出#2
0
输入#3
2 1 2
输出#3
2 2 1 1 2
输入解题思路,AI测评打分。不知道怎么写?