#aBC355E. [ABC355E] Guess the Sum

[ABC355E] Guess the Sum

AT_abc355_e [ABC355E] Guess the Sum

题目描述

本题是一个交互式问题(你的程序需要与评测系统通过输入输出进行交互)。

给定正整数 NN,以及两个整数 L,RL,R,满足 0LR<2N0 \leq L \leq R < 2^N。评测系统持有一个长度为 2N2^N 的数列 A=(A0,A1,,A2N1)A = (A_0, A_1, \dots, A_{2^N-1}),其中每个元素都是 009999 之间的整数。

你的目标是求出 AL+AL+1++ARA_L + A_{L+1} + \dots + A_R 除以 100100 的余数。但你无法直接得知数列 AA 的元素值。你可以向评测系统发起如下询问:

  • 选择非负整数 i,ji, j,使得 2i(j+1)2N2^i(j+1) \leq 2^N。令 l=2ij,r=2i(j+1)1l = 2^i j, r = 2^i(j+1) - 1,你可以询问 Al+Al+1++ArA_l + A_{l+1} + \dots + A_r 除以 100100 的余数。

对于任意的 AA,能够确定 AL+AL+1++ARA_L + A_{L+1} + \dots + A_R 除以 100100 的余数所需的最小询问次数为 mm。请你在不超过 mm 次的询问内,求出 AL+AL+1++ARA_L + A_{L+1} + \dots + A_R 除以 100100 的余数。

输入格式

本题为交互式问题(你的程序需要与评测系统通过输入输出进行交互)。

首先,你需要从标准输入读取整数 N,L,RN, L, R

NN LL RR

接下来,你可以不断进行询问,直到能够确定 AL+AL+1++ARA_L + A_{L+1} + \dots + A_R 除以 100100 的余数。每次询问,请按如下格式输出到标准输出:

? ii jj

其中 i,ji, j 需满足:

  • i,ji, j 为非负整数
  • 2i(j+1)2N2^i(j+1) \leq 2^N

评测系统会返回如下格式的响应:

TT

其中 TT 是你本次询问的答案,即 l=2ij,r=2i(j+1)1l = 2^i j, r = 2^i(j+1) - 1 时,Al+Al+1++ArA_l + A_{l+1} + \dots + A_r 除以 100100 的余数。

如果 i,ji, j 不满足约束,或询问次数超过 mm,则 TT-1

如果评测系统返回 -1,你的程序已被判为错误,请立即终止程序。

当你确定 AL+AL+1++ARA_L + A_{L+1} + \dots + A_R 除以 100100 的余数为 SS 时,请按如下格式输出答案,并立即终止程序:

! SS

输出格式

见上文输入格式说明。

说明/提示

约束条件

  • 1N181 \leq N \leq 18
  • 0LR2N10 \leq L \leq R \leq 2^N - 1
  • 输入均为整数

注意事项

  • 每次输出后请在末尾加上换行并刷新标准输出,否则可能会导致评测结果为 TLE。
  • 如果在交互过程中输出格式错误或程序中途退出,评测结果不确定。
  • 输出答案后请立即终止程序,否则评测结果不确定。

输入输出样例

以下是 N=3,L=1,R=5,A=(31,41,59,26,53,58,97,93)N=3, L=1, R=5, A=(31,41,59,26,53,58,97,93) 时的输入输出示例。在此情况下 m=3m=3,因此最多可进行 33 次询问。

输入 输出 说明
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$ 后输出。

由 ChatGPT 4.1 翻译