AT_abc355_e [ABC355E] Guess the Sum

题目描述

[problemUrl]: https://atcoder.jp/contests/abc355/tasks/abc355_e 本题是一个**交互式问题**(你的程序需要与评测系统通过输入输出进行交互)。 给定正整数 $N$,以及两个整数 $L,R$,满足 $0 \leq L \leq R < 2^N$。评测系统持有一个长度为 $2^N$ 的数列 $A = (A_0, A_1, \dots, A_{2^N-1})$,其中每个元素都是 $0$ 到 $99$ 之间的整数。 你的目标是求出 $A_L + A_{L+1} + \dots + A_R$ 除以 $100$ 的余数。但你无法直接得知数列 $A$ 的元素值。你可以向评测系统发起如下询问: - 选择非负整数 $i, j$,使得 $2^i(j+1) \leq 2^N$。令 $l = 2^i j, r = 2^i(j+1) - 1$,你可以询问 $A_l + A_{l+1} + \dots + A_r$ 除以 $100$ 的余数。 对于任意的 $A$,能够确定 $A_L + A_{L+1} + \dots + A_R$ 除以 $100$ 的余数所需的最小询问次数为 $m$。请你在不超过 $m$ 次的询问内,求出 $A_L + A_{L+1} + \dots + A_R$ 除以 $100$ 的余数。

输入格式

本题为交互式问题(你的程序需要与评测系统通过输入输出进行交互)。 首先,你需要从标准输入读取整数 $N, L, R$。 > $N$ $L$ $R$ 接下来,你可以不断进行询问,直到能够确定 $A_L + A_{L+1} + \dots + A_R$ 除以 $100$ 的余数。每次询问,请按如下格式输出到标准输出: > ? $i$ $j$ 其中 $i, j$ 需满足: - $i, j$ 为非负整数 - $2^i(j+1) \leq 2^N$ 评测系统会返回如下格式的响应: > $T$ 其中 $T$ 是你本次询问的答案,即 $l = 2^i j, r = 2^i(j+1) - 1$ 时,$A_l + A_{l+1} + \dots + A_r$ 除以 $100$ 的余数。 如果 $i, j$ 不满足约束,或询问次数超过 $m$,则 $T$ 为 `-1`。 如果评测系统返回 `-1`,你的程序已被判为错误,请立即终止程序。 当你确定 $A_L + A_{L+1} + \dots + A_R$ 除以 $100$ 的余数为 $S$ 时,请按如下格式输出答案,并立即终止程序: > ! $S$

输出格式

见上文输入格式说明。

说明/提示

## 约束条件 - $1 \leq N \leq 18$ - $0 \leq L \leq R \leq 2^N - 1$ - 输入均为整数 ## 注意事项 - **每次输出后请在末尾加上换行并刷新标准输出,否则可能会导致评测结果为 TLE。** - **如果在交互过程中输出格式错误或程序中途退出,评测结果不确定。** - 输出答案后请立即终止程序,否则评测结果不确定。 ## 输入输出样例 以下是 $N=3, L=1, R=5, A=(31,41,59,26,53,58,97,93)$ 时的输入输出示例。在此情况下 $m=3$,因此最多可进行 $3$ 次询问。 输入 输出 说明 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 翻译