Universal Cup Judging System

Universal Cup

Time Limit: 2.0 s Memory Limit: 1024 MB Total points: 100 Hackable ✓
Statistics

Lupa 非常喜欢把液体从一个容器倒入另一个容器。

Lupa 有 $n$ 个普通透明瓶子和一个特殊透明瓶子。每个普通瓶子的高度为 $w$:瓶底位于高度 $0$,瓶顶位于高度 $w$。特殊瓶子的高度为 $2w$。

所有瓶子最初都装有果汁,液面位于同一个未知的整数高度 $x$,其中 $0\le x\le w$。Lupa 不知道 $x$ 的值。

普通瓶子被深色标签部分遮住。在第 $i$ 个普通瓶子中,标签遮住从 $l_i$ 到 $w$ 的所有高度。因此,当且仅当这个瓶子的果汁液面严格低于 $l_i$ 时,Lupa 才能看到液面。

特殊瓶子的标签有所不同:它遮住从 $0$ 到 $w$ 的所有高度。因此,当且仅当特殊瓶子的果汁液面严格高于 $w$ 时,Lupa 才能看到液面。

Lupa 想要唯一确定未知值 $x$。

Lupa 可以进行倒汁操作。在一次操作中,她选择一个普通瓶子和一个非负整数 $p$,然后从这个普通瓶子中恰好倒出 $p$ 单位的果汁到特殊瓶子里。每次操作后,Lupa 都会按照上述标签的遮挡情况,观察所有可见的果汁液面。

然而,Lupa 不允许进行可能无法完成的倒汁操作。更准确地说,在选择一次操作之前,考虑仍与此前所有观察结果相符的所有 $x$ 的值。只有对于每一个这样的可能值 $x$,所选瓶子中都至少有 $p$ 单位的果汁时,才允许从该瓶子倒出 $p$ 单位的果汁。

Lupa 的策略可以是自适应的:下一次操作可以取决于之前操作后得到的观察结果。一旦观察结果能够唯一确定 $x$ 的值,她就会停止。

求保证确定 $x$ 所需的最少倒汁次数,无论未知值 $x$ 是多少。

输入格式

第一行包含两个整数 $n$ 和 $w$($1\le n\le 10^6$,$2\le w\le 10^{18}$),分别表示普通瓶子的数量和高度。

第二行包含 $n$ 个整数 $l_1,l_2,\ldots,l_n$($1\le l_i<w$),表示普通瓶子上深色标签的下边界高度。

输出格式

输出一个整数,表示保证确定 $x$ 所需的最少倒汁次数。

样例

输入格式 1

3 34
1 2 4

输出格式 1

3

说明

problem_20257_58da05cd6c75ec582ff2e430ac90ae1e.png
problem_20257_06b7ff40c4f84164981b1f57ac0efccd.png

在第一个测试中,考虑标签下边界为 $4$ 的瓶子。如果 $x<4$,那么在进行任何倒汁操作之前就能看到它的液面,因此已经知道 $x$。所以,假设 $4\le x\le 34$。

Lupa 首先从标签下边界为 $4$ 的瓶子中倒出 $4$ 单位的果汁到特殊瓶子里。

这次操作后,如果 $x<8$,那么这个瓶子中的液面高度为 $x-4<4$,因此可以看到液面并确定 $x$。如果 $x>30$,那么特殊瓶子中的液面高度为 $x+4>34$,因此可以看到液面并确定 $x$。所以,只有 $8\le x\le 30$ 的值仍可能未知。

接下来,Lupa 从同一个瓶子中再倒出 $4$ 单位的果汁。

这次操作后,如果 $x<12$,那么这个瓶子中的液面高度为 $x-8<4$,因此可以看到液面并确定 $x$。如果 $x>26$,那么特殊瓶子中的液面高度为 $x+8>34$,因此可以看到液面并确定 $x$。所以,只有 $12\le x\le 26$ 的值仍可能未知。

最后,Lupa 从标签下边界为 $2$ 的瓶子中倒出 $12$ 单位的果汁。

这次操作后,如果 $x<14$,那么这个瓶子中的液面高度为 $x-12<2$,因此可以看到液面并确定 $x$。如果 $x>14$,那么特殊瓶子中的液面高度为 $x+20>34$,因此可以看到液面并确定 $x$。唯一剩下的值是 $x=14$,所以也能确定它。

因此,经过 3 次倒汁操作后,Lupa 保证能够确定 $x$。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.