#P13235. [GCJ 2015 Finals] Pretty Good Proportion

    ID: 13059 远端评测题 5000~10000ms 1024MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>动态规划 DP2015排序Google Code Jam

[GCJ 2015 Finals] Pretty Good Proportion

Description

我有一个长度为 NN 的二进制数字序列。我正在寻找一个子串,使得其中 11 的比例恰好等于给定的分数 FF,但这样的子串可能不存在,所以我会选择一个比例最接近 FF 的子串。

你能找到一个子串,使得其中 11 的比例尽可能接近给定的分数 FF 吗?请输出这样一个子串最早出现的起始下标。

Input Format

输入的第一行为测试用例数 TT。接下来有 TT 组测试数据。每组测试数据的第一行为 NNFFFF 是一个介于 0011 之间的十进制小数,且小数点后恰好有 66 位。下一行为 NN 个数字,每个数字为 0011

Output Format

对于每组测试数据,输出一行,格式为 "Case #x: y",其中 xx 表示测试用例编号(从 11 开始),yy 表示满足条件的子串的最小起始下标(从 00 开始)。如果有多个答案,输出最小的下标。

5
12 0.666667
001001010111
11 0.400000
10000100011
9 0.000000
111110111
5 1.000000
00000
15 0.333333
000000000011000
Case #1: 5
Case #2: 5
Case #3: 5
Case #4: 0
Case #5: 6

Hint

样例解释

在第 1 组测试数据中,没有子串的 11 比例恰好等于 666667/1000000666667/1000000。最接近的比例是 2/32/3。输入字符串中有 55 个子串达到了这个比例——长度为 33 的子串有 33 个,分别从下标 5,7,85, 7, 8 开始(101,101,011101, 101, 011);长度为 66 的子串有 22 个,分别从下标 5,65, 6 开始(101011,010111101011, 010111)。这些下标中最小的是 55

数据范围

  • 1T1001 \leq T \leq 100
  • 0F10 \leq F \leq 1
  • FF 恰好有 66 位小数。

小数据范围

  • 时间限制:5 秒。
  • 1N10001 \leq N \leq 1000

大数据范围

  • 时间限制:10 秒。
  • 1N500, ⁣0001 \leq N \leq 500,\!000

由 ChatGPT 4.1 翻译