luogu#P6241. [eJOI2019] 塔
[eJOI2019] 塔
题目描述
Jernej 在晚上感到很无聊,于是他发明了一个游戏。他想要用数字卡片生成一个塔。一开始,他在一张卡片上写下了一个数字 。
Jernej 可以再另一张写下一个新的数字并放在塔顶。 这个新的数字必须等于之前塔中某一连续段的数字之和 。也就是说,假设现在塔中已有 个数字,你可以任意选取塔中的一段 ,并对这一段求和,将得到的新数字添加至塔顶,其中 。
Jernej 想要生成 个塔(相当于多组询问),每个塔顶都是 个可能不同的他想要的数字。你需要帮助他求出生成这些塔的最小步数及其方案。
输入格式
第一行:一个整数 ,表示塔的个数;
接下来 行,一行一个整数 ,表示现在 Jernej 想生成一个塔顶数字为 的塔。
保证有解。
输出格式
对于每个询问 :
- 输出一行,包含一个整数 (),表示最小步数。
- 接下来 行,每行两个由空格隔开的整数 ,表示建生成塔的方案(操作时间早的先输出)。
3
2
3
7
2
1 1
1 2
3
1 1
2 2
1 3
4
1 1
1 2
2 3
1 4
提示
【Special Judge 计分标准】
本题共 个测试点。对于每个测试点,计分规则如下:
- 对于测试点中的任意一个塔,如果你的程序输出的 最小步数 与标准答案 均一致 ,那么这个测试点你会得到 分。
- 对于测试点中的任意一个塔,如果你的程序输出的答案是错误的,那么得 分(评测时如果发现输出不完全可能会得到 UKE)。
- 如果你的答案并 不是最优解但不是错误的 ,那么对于该测试点中的第 个塔,你得到的分数为 $\text{score}_i =1+\dfrac{\text{minimum steps}}{\text{solution steps}}\times 7$,其中 表示正确答案的最小步数, 表示你的程序输出的答案。最终这个测试点的得分为 。向上取两位小数。
【输入输出样例解释】
询问 1 解释:
- Jernej 想要生成造一个塔顶数为 的塔。起初塔为 (左边表示塔底,右边表示塔顶);
- 第一步,选取子段 ,对 中的所有元素求和,得到 ,现在塔为 ;
- 第二步,选取子段 ,对 中的所有元素求和,得到 ,现在塔为 。此时已经达到了询问的要求。
询问 2 解释:
- 要生成塔顶为 的塔不止一种方法。除了样例输出的一种之外,下面的也是正确答案:
1 1
1 2
2 3
【数据规模与约定】
本题采用多测试点捆绑测试,共有 7 个子任务。
- Subtask 1(1 test case - 10 points):。
- Subtask 2(1 test case - 10 points):。
- Subtask 3(1 test case - 10 points):。
- Subtask 4(1 test case - 10 points):。
- Subtask 5(1 test case - 10 points):。
- Subtask 6(1 test case - 10 points):。
- Subtask 7(1 test case - 10 points):。
- Subtask 8(1 test case - 10 points):。
- Subtask 9(2 test case - 20 points):无其他限制。
对于所有数据,保证
【说明】
原题来自:eJOI2019 Problem D. Tower。
翻译提供:@_Wallace_