#P14537. [OII 2025] 双色金字塔 / Piramide bicolore
[OII 2025] 双色金字塔 / Piramide bicolore
题目背景
译自 Italian Olympiad in Informatics (OII) 2025 - Piramide bicolore。
建造 OII 纪念金字塔的准备工作一切就绪,现在轮到 Nicoletta 向乌迪内市议会提交项目方案了。
题目描述
金字塔由黑色和白色的立方体构成。为了加快进度,项目按以下方式执行:
- 首先,Nicoletta 将设计底座(第 层):这一层是一个 的立方体方阵,其颜色可以用矩阵 描述。具体来说,如果 , 上的立方体就是黑色,否则是白色的。
- 然后,她将继续建造第 层到第 层。第 层的每个立方体都恰好位于其下方四个立方体的公共顶点之上。如果在它下方的四个立方体中,相邻的立方体都不同色,这个立方体就是黑色,否则是白色的。
:::align{center}

图 1:Nicoletta 提出的金字塔方案之一。
:::
市议会对该项目仍不完全信服,并希望获得有关金字塔最终外观的更多信息。为了更清楚地了解情况,议会决定向 Nicoletta 提出 个问题:在每个问题中,他们会询问位于第 层、位置 的立方体是什么颜色。
金字塔中的立方体可由一个三元组 表示,其中 是立方体的层数, 是其在层内的坐标。特别地,立方体 恰好位于其下方四个立方体的公共顶点之上:、、 和 。在样例解释中你可以看到一个示例。
实现方式
附件中包含一个实现示例 concessione.cpp。
你需要实现如下函数:
void init(int N, vector<string> M);
- :金字塔的大小。
- :二维数组,每一维下标从 到 ,表示金字塔的第 层(底座)。
- 对于每个测试点,该函数都只会被调用一次。
bool query(int h, int x, int y);
- 整数 表示立方体的位置是 。
- 如果位置 上的立方体是黑色的,则该函数需要返回
true;否则返回false。 - 对于每个测试点,该函数将被调用 次。
输入格式
评测程序的输入格式如下:
- 第 行:两个整数 和 。
- 第 行():一个只包含字符
0和1的字符串 ,表示 。 - 第 行():三个整数 。
输出格式
评测程序的输出格式如下:
输出包含 行,内容为 query 函数返回的值。
4 6
0111
1010
1101
0110
1 0 0
2 0 1
2 0 0
2 1 1
3 0 0
1 1 2
1
0
1
0
0
1
提示
【样例解释】
该图展示了第一个样例:

位置 上的立方体是黑色的,因为它下方的四个立方体中,相邻的立方体都不同色。
位置 上的立方体是白色的,因为它下方的立方体 和 相邻且同色。
【数据范围】
- ;
- ;
- 对于所有的 ,;
- 对于每次询问,, 。
【子任务】
| 子任务编号 | 分值 | 约束条件 |
|---|---|---|
| 样例 | ||
| 当 时 ,即底座中的黑色立方体全在一条对角线上 | ||
| 且仅询问金字塔塔尖的颜色 | ||
| 无额外限制 | ||
京公网安备 11011102002149号