AT_s8pc_3_h 爆弾ゲーム
题目描述
终于到了 square869120Contest #3 的最后一题。
square1001 在一个地牢内布置了炸弹。
地牢的形状是一个 $50 \times 50$ 的网格,左上角为 $(0,0)$,右下角为 $(49,49)$。
在这个地牢中,有 250 个炸弹,它们各自分布在不同的格子中。
你必须知道所有炸弹的位置才能逃出这个地牢。
“这怎么可能办到啊!根本找不到线索!求求你帮帮我啊啊啊啊啊!”
幸运的是,你可以通过以下方式进行询问:
- 向系统询问左上角为 $(a, b)$、右下角为 $(c, d)$ 的区域内有多少个炸弹。
但是,询问次数过多会降低存活概率,因为炸弹越容易被触发。
因此,请尽可能减少询问次数,以便准确找出 250 个炸弹的位置,这样得分更高。
我们期待你的挑战。
### 输入格式
程序首先会输入如下信息:
> $H\ W\ N\ K$
- $H, W$ 代表地牢的大小。在本问题中,$H, W = 50$。
- $N$ 表示地牢中的炸弹总数。本题中,$N = 250$。
- $K$ 是用于输出最终状态的一个整数。
你可以多次进行询问。每次询问的格式如下:
> $?\ a\ b\ c\ d$
这表示询问在左上角 $(a, b)$ 到右下角 $(c, d)$ 区域内的总炸弹数。
每次询问系统会返回:
> $p$
这里,$p$ 代表询问区域内的炸弹总数。
当你找出所有炸弹后,需要输出:
> $!\ ans$
其中,$ans$ 的计算方法是:
- $ans = \sum_{i=0}^{H-1} \sum_{j=0}^{W-1} r_{i, j} 2^{iW + j} \mod K$
这里 $r_{i, j}$ 是指 $(i, j)$ 格子中的炸弹数量。
### 数据范围与提示
#### 约束
- $H, W = 50$
- $N = 250$
- $1,000,000,000 \le K \le 1,000,010,000$($K$ 是随机生成的)
#### 得分
总共有 5 个测试用例。每个测试用例的评分标准如下:
- 询问次数记为 $Q$。
- 若 $Q > 2500$ 则得分为 0 分 (错误答案)。
- 若 $930 \le Q \le 2500$ 则得分计算为 $score = \max(\lfloor 125 - 3.2\sqrt{Q - 920} \rfloor, 40)$。
- 若 $Q < 880$ 得分为满分。
### 输入输出示例
譬如,以下是一种可能的地牢配置:
```
H=4, W=4, N=4
1001
0000
0010
0100
```
可能的输入输出示例:
```
程序输入 程序输出
4 4 4 1000000007
? 0 0 0 1 1
? 0 1 0 2 0
? 0 3 1 3 1
? 2 1 3 2 2
? 2 2 2 2 1
! 9225
```
注意,这些询问可能不是最佳的,并且通常还不足以完全确定地牢内的所有炸弹位置。
**本翻译由 AI 自动生成**
输入格式
无
输出格式
无
说明/提示
### 制約
- $ H,\ W\ =\ 50 $
- $ N\ =\ 250 $
- $ 1,000,000,000\ \le\ K\ \le\ 1,000,01,000 $ ($ K $はランダムに与えられる)
### 得点
5つのテストケースがある。各テストケースに対する得点は, 以下のように計算される。
- 質問回数を $ Q $ とする。
- $ Q\ >\ 2500 $ のとき, $ 0 $ 点 (Wrong Answer) となる。
- $ 930\ \le\ Q\ \le\ 2500 $ のとき, $ score\ =\ max(\lfloor\ 125\ -\ 3.2\sqrt{Q\ -\ 920}\ \rfloor,\ 40) $ となる。
- $ 880\ \le\ Q $Q
### 入出力例1
例えば, 以下のような配置の場合、以下のような入出力が考えられる。
ただし, この場合 $ H\ =\ W\ =\ 4,\ N\ =\ 4 $ なので, 実際のテストケースには存在しない。
```
H=4, W=4, N=4
1001
0000
0010
0100
```
入出力として考えられる例
プログラムへの入力 プログラムの出力 4 4 4 1000000007 ? 0 0 0 1 1 ? 0 1 0 2 0 ? 0 3 1 3 1 ? 2 1 3 2 2 ? 2 2 2 2 1 ! 9225 ただし, 必ずしも意味のある質問をしているとは限りません。
また, これらの情報で必ずしも盤面が把握できるとは限らず, エスパーをすることも許されはします。