#P9468. [EGOI2023] Candy / 糖果

[EGOI2023] Candy / 糖果

题目背景

Day 2 Problem B.

题面译自 EGOI2023 candy

题目描述

在伊卡古城,据说有一座宫殿,其财富超乎想象。在其中,一个走廊中有 NN 盒来自世界各地的糖果。路过的旅行者只要用黄金支付糖果的重量,就可以拿走任意多的糖果。

装糖果的盒子被从左到右编号为 00N1N-1。在盒子 ii 中,剩余有 aia_i 单位的糖果,其中 aia_i 是一个非负整数。

作为宫殿的守护者,你需要移动这些盒子,使得有很多糖果的盒子更靠近入口。

你已知数组 a0,a1,,aN1a_0,a_1,\cdots,a_{N-1},以及整数 FFTT。在一次操作中,你被允许交换 a0,a1,,aN1a_0,a_1,\cdots,a_{N-1} 中的任意两个相邻元素。要使得数组前 FF 个元素的和至少为 TT,至少需要多少次操作?

输入格式

第一行三个整数 N,F,TN,F,T

第二行 NN 个整数 a0,a1,,aN1a_0,a_1,\cdots,a_{N-1}

输出格式

如果不可能达成目标,输出 NO

否则,输出一个整数,表示最少操作数。

6 2 27
10 4 20 6 3 3
1
6 5 5000000000
1000000000 1000000000 0 1000000000 1000000000 1000000000
3
3 2 100
20 30 60
NO
1 1 100
100
0

提示

样例 11 解释

在样例 11 中,前两个元素的和应当至少为 2727。一次相邻元素的交换就可以达成目标:交换 442020。在这次交换后,数组变成 10 20 4 6 3 3,前两个元素的和为 10+20=302710+20=30\ge 27


样例 22 解释

在样例 22 中,这个 00 必须一路移动到数组末尾;这需要 33 次交换。


样例 33 解释

在样例 33 中,不可能使得前两个元素和至少为 100100;我们能做到的最好结果是 60+30=9060+30=90


数据范围

对于全部数据,1N1001\le N\le 1001FN1\le F\le N0T10110\le T\le 10^{11}0ai1090\le a_i\le 10^9

  • 子任务一(66 分):N2N\le 2ai100a_i\le 100T109T\le 10^9
  • 子任务二(1919 分):ai1a_i\le 1
  • 子任务三(1616 分):N20N\le 20
  • 子任务四(3030 分):ai100a_i\le 100
  • 子任务五(2929 分):无特殊限制。

提示

答案可能不在 3232 位整型范围内,如果你使用 C++ 语言,请注意溢出的可能。