#P13235. [GCJ 2015 Finals] Pretty Good Proportion

    ID: 15105 远端评测题 5000~10000ms 1024MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>动态规划 DP2015排序Google Code Jam

[GCJ 2015 Finals] Pretty Good Proportion

题目描述

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

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

输入格式

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

输出格式

对于每组测试数据,输出一行,格式为 "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

提示

样例解释

在第 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。

数据范围

  • 1≤T≤1001 \leq T \leq 100。
  • 0≤F≤10 \leq F \leq 1。
  • FF 恰好有 66 位小数。

小数据范围

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

大数据范围

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

由 ChatGPT 4.1 翻译