#5102. Guess the Sum

0

Guess the Sum

Guess the Sum

题目描述

这是一个 交互式问题(你的程序通过标准输入输出与裁判交互)。 给定正整数 NN 和整数 LL 与 RR 满足 0 \leq L \leq R < 2^N。裁判有一个隐藏序列 A=(A0,A1,…,A2N−1)A = (A_0, A_1, \dots, A_{2^N-1}),序列元素为 00 到 9999 之间的整数(包含端点)。 你的目标是求出 AL+AL+1+⋯+ARA_L + A_{L+1} + \dots + A_R 被 100100 除后的余数。但你不能直接知道序列 AA 中元素的值。相反,你可以向裁判询问如下问题:

选择非负整数 ii 和 jj,满足 2i(j+1)≤2N2^i(j+1) \leq 2^N。令 l=2ijl = 2^i j 且 r=2i(j+1)−1r = 2^i (j+1) - 1。询问 Al+Al+1+⋯+ArA_l + A_{l+1} + \dots + A_r 被 100100 除后的余数。

设 mm 为在任意序列 AA 情况下确定 AL+AL+1+⋯+ARA_L + A_{L+1} + \dots + A_R 被 100100 除后的余数所需的最小问题次数。你需要在不超过 mm 个问题内找到该余数。

输入格式

输出格式

提示

1≤N≤181 \leq N \leq 18 0≤L≤R≤2N−10 \leq L \leq R \leq 2^N - 1 所有输入值均为整数。这是一个交互式问题(你的程序通过标准输入输出与裁判交互)。 首先,从标准输入读取整数 NN、LL 和 RR: NN LL RR

然后,重复提问直到你可以确定 AL+AL+1+⋯+ARA_L + A_{L+1} + \dots + A_R 被 100100 除后的余数。每个询问应按以下格式输出: ?? ii jj

其中,ii 和 jj 必须满足以下约束:

ii 和 jj 为非负整数。 2i(j+1)≤2N2^i(j+1) \leq 2^N

对于该询问,裁判会在标准输入中返回如下格式的回答: TT

其中,TT 是问题的答案,即当 l=2ijl = 2^i j 且 r=2i(j+1)−1r = 2^i (j+1) - 1 时 Al+Al+1+⋯+ArA_l + A_{l+1} + \dots + A_r 被 100100 除后的余数。 如果 ii 和 jj 不满足约束,或提问次数超过 mm,则 TT 将为 −1-1。 如果裁判返回 −1-1,你的程序已被判为错误。在这种情况下,立即终止程序。 一旦你确定了 AL+AL+1+⋯+ARA_L + A_{L+1} + \dots + A_R 被 100100 除后的余数,请按以下格式输出该余数并立即终止程序: !! SS在每次输出的末尾打印换行并刷新标准输出。否则,判题可能会出现 TLE。 如果你的输出格式不正确或程序提前退出,判题结果将不确定。 输出答案后,立即终止程序。否则,判题结果将不确定。下面给出 N=3N=3、L=1L=1、R=5R=5 以及 A=(31,41,59,26,53,58,97,93)A=(31, 41, 59, 26, 53, 58, 97, 93) 的示例。在此例中,m=3m=3,因此你最多可以询问三次。

Input Output Description
$3 1 5$ 首先给出整数 $N$、$L$ 和 $R$。
$? 0 1$ 询问 $(i, j) = (0, 1)$ 的问题。
$41$ $l=1$ 且 $r=1$,所以返回 $A_1=41$ 被 $100$ 除的余数,为 $41$。裁判返回该值。
$? 1 1$ 询问 $(i, j) = (1, 1)$ 的问题。
$85$ $l=2$ 且 $r=3$,所以返回 $A_2 + A_3 = 85$ 被 $100$ 除的余数,为 $85$。裁判返回该值。
$? 1 2$ 询问 $(i, j) = (1, 2)$ 的问题。
$11$ $l=4$ 且 $r=5$,所以返回 $A_4 + A_5 = 111$ 被 $100$ 除的余数,为 $11$。裁判返回该值。
$! 37$ 答案为 $37$,因此输出该值。

标签: AtCoder|abc355E

来源

AtCoder|abc355E