#P3460. Booksort

    ID: 2461 传统题 1000ms 256MiB 尝试: 4 已通过: 1 难度: 10 上传者: 标签>搜索DFSBFS搜索与剪枝BAPC 2006 Qualification

Booksort

中文题面:

描述:

莱顿大学图书馆拥有数百万册藏书。当学生想要借阅某本特定书籍时,通常会在线提交借书申请。如果书籍可外借,次日学生即可到借书处领取。这是图书馆现代借书方式。

图书馆内有一个部门,书架林立,仍沿用传统借书方式。学生可直接在书架间走动,挑选心仪的书籍,登记后带回家,最长可借阅三周。

然而,常出现以下情况:学生从书架上取下一本书,仔细查看后决定不阅读,便将其放回。

遗憾的是,并非所有学生都会谨慎处理最后一步。尽管每本书均有唯一识别码(用于按序排列书架),但部分学生会将浏览过的书籍放错位置。他们确实会将书放回正确的书架,但未归位到书架上的正确位置。其他学生通过唯一识别码(可在在线目录中查询)查找想借的书籍。

对他们而言,书籍是否按识别码排序至关重要。对图书管理员来说,书籍有序排列同样重要,这能更轻松地核查是否存在失窃情况(即书籍未被借出却缺失)。

因此,图书管理员每周会巡查该部门,并整理每层书架。整理单层书架可行,但仍需耗费相当精力。管理员考虑过多种算法后,认为通过转置排序是最简单的方法:

只要书籍未排序,取出相邻的若干本书(一个书块);

将“空缺”左侧或右侧的另一书块移入空缺;

将第一步取出的书块放回第二步操作后的新空缺。

上述步骤序列称为一次转置。

下图可帮助理解算法步骤(XX表示第一个书块,YY表示第二个书块):

Original situation:
After step 1:
After step 2:
After step 3:

显然,管理员希望尽可能减少工作量,即对每层书架,用最少的转置次数完成排序。

尤其需要判断:能否在最多44次转置内完成排序?请回答这一问题。

输入:

输入文件第一行为测试用例数量。每个测试用例格式如下:

一行整数nn 1n15(1 ≤ n ≤ 15),表示某层书架的书籍数量;

一行nn个整数(11nn的某种排列),表示当前书架上书籍的唯一识别码顺序,空格分隔。

输出:

对每个测试用例,输出一行:

若将书籍按识别码升序排列所需的最小转置次数T4T ≤ 4,输出TT

若需至少55次转置,输出“5 or more”。

输入数据1

3
6
1 3 4 6 2 5
5
5 4 3 2 1
10
6 8 5 3 4 7 2 9 1 10

输出数据1

2
3
5 or more

来源

2006年波罗的海算法与编程竞赛资格赛