专栏文章
题解:P13577 [CCPC 2024 重庆站] 骰子
P13577题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioigvte
- 此快照首次捕获于
- 2025/12/02 19:45 3 个月前
- 此快照最后确认于
- 2025/12/02 19:45 3 个月前
事实上,如果做这道题的时候手边能有个骰子就会简单很多(我就有好几个骰子,嘻嘻)。
思路
这道题要求一种感觉。
幸运的是,我很快就找到了这种“感觉”:当 时,所有 个格子都可以在任意次操作后变成 。
幸运的是,我很快就找到了这种“感觉”:当 时,所有 个格子都可以在任意次操作后变成 。
证明
在这个证明中,我们无需考虑其他数字在骰子上的位置,只需要考虑 在哪个面即可。
我们可以将网格的右上角(骰子的初始位置)的坐标设为 , 轴向右、 轴向下建立坐标系。
初始,骰子在 位置, 在下面。
接下来开始我们的操作。
接下来开始我们的操作。
- 骰子在 位置;
- 骰子向前转到 位置(第 行第 列), 被转到后面;
- 骰子向右转到 位置, 还在后面;
- 骰子向后转到 位置, 被转到下面;
- 在 位置写下 。
让我们来表示这个操作。
- 骰子在 位置(这个位置已经被写下 ;满足 )。
- ;
- ;
- ;
- 在 位置写下 。
至此,我们完成了骰子向右转 格并写下 的操作。
总结:借助下一行不断完成向右 格并写下 的操作,最后填满网格。
总结:借助下一行不断完成向右 格并写下 的操作,最后填满网格。
现在我们还要来考虑 或 的特殊情况。
- 时,说明来到最后一行,无法借助下一行。此时可以借助上一行,即: 并继续完成之后的操作。
- 时,说明来到当前行的最后一格。接下来详细解释。
当 时,我们可以按照如下操作将位于 骰子转到下一行,并使 落到 这个格子上。
- 骰子在 位置(此时 在下面)。
- 骰子向左转到 位置, 被转到右面;
- 骰子向前转到 位置, 还在右面;
- 骰子向右转到 位置, 被转到下面;
- 在 位置写下 。
在第 行中,我们不能再将骰子每次向右移(因为本来就在最右边),但可以改为向左移。具体操作方法和向右移相似,只是每次操作方向对称,不再赘述。
结论
由以上证明,最终可以得出结论:当 时,所有格子都可以经过若干次操作后被写上 ,直接输出
n * m * 6。代码
CPP#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m; cin >> n >> m;
cout << n * m * 6;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...