#P13233. [GCJ 2015 Finals] Costly Binary Search

    ID: 13057 远端评测题 5000~30000ms 1024MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>动态规划 DP2015Google Code Jam

[GCJ 2015 Finals] Costly Binary Search

Description

你被要求实现可以说是最重要的算法之一:二分查找。更准确地说,你有一个已排序的对象数组,以及一个你想要插入到数组中的新对象。为了找到插入的位置,你可以将你的对象与数组中的对象进行比较。每次比较的结果要么是“更大”,意味着你的对象应该插入到被比较对象的右侧;要么是“更小”,意味着你的对象应该插入到被比较对象的左侧。为简化问题,比较结果不会出现“相等”。保证当你的对象大于数组中的某个对象时,也大于该对象左侧的所有对象;同理,当你的对象小于数组中的某个对象时,也小于该对象右侧的所有对象。如果数组有 nn 个元素,那么你的算法可能有 n+1n+1 种不同的结果。

在本题中,并非所有的比较花费都是相同的。更准确地说,将你的对象与数组中第 ii 个对象进行比较的代价为 aia_i,其中 aia_i 是一个介于 1 到 9 之间的整数。

你的二分查找在最坏情况下的总代价是多少?假设你总是采用最优策略,尽量使最坏情况下的总代价最小。

Input Format

输入的第一行给出测试用例的数量 TT。接下来有 TT 行,每行包含一个数字序列,描述一个测试用例的比较代价 aia_i。数组的大小 nn 由该序列的长度给出。

Output Format

对于每个测试用例,输出一行,格式为 "Case #x: y",其中 xx 是测试用例编号(从 1 开始),yy 是最坏情况下二分查找的总代价。

4
111
1111
1111111
1111119
Case #1: 2
Case #2: 3
Case #3: 3
Case #4: 10

Hint

样例说明

  • 1T501 \leq T \leq 50
  • 所有数字都在 1 到 9 之间。
  • 每行数字之间没有空格。

小数据集(8 分)

  • 时间限制:5 秒。
  • 1n1041 \leq n \leq 10^{4}

大数据集(19 分)

  • 时间限制:30 秒。
  • 1n1061 \leq n \leq 10^{6}

由 ChatGPT 4.1 翻译