博客
关于我
HDU 6266 Hakase and Nano (规律 + 博弈)
阅读量:617 次
发布时间:2019-03-13

本文共 1423 字,大约阅读时间需要 4 分钟。

对于H和N进行的石子游戏,我们需要分析不同情况下谁能获胜。游戏规则是:每轮H可以进行两次操作,而N只能进行一次操作。这个特殊规则影响了游戏的进程。

前提分析

我们可以从简单情况出发,观察游戏规律:

  • 堆石子数简化情况
    • 当堆数为3,石子数为1,1,1时:H先手会失败,N先手则是胜利。
    • 当堆数为4,石子数为1,1,1,x(x为任意数):H必败,N可胜。
    • 当堆数为3,石子数为1,1,x(x>1):N先手时H必败。
  • 必败态分析

    通过上述例子可以总结出以下条件:

  • H先手时必败的条件

    • 堆石数为1的数量n,且n能被3整除。
  • N先手时必败的条件

    • 堆石数满足以下两种情况之一:
      • 堆数n满足n%3 == 1,并且堆数为1的数量cnt >= n-1。
      • 堆数n满足n%3 == 0,并且堆数为1的数量cnt == n-1。
  • 代码实现

    #include 
    #include
    using namespace std;int main() { int t; cin >> t; for (int case = 0; case < t; ++case) { int n, d; cin >> n >> d; int cnt = 0; for (int i = 1; i <= n; ++i) { int x; cin >> x; if (x == 1) { cnt++; } } if (d == 1) { // H先手 if (cnt == n && cnt % 3 == 0) { cout << "No"; } else { cout << "Yes"; } } else { // N先手 bool condition1 = (n % 3 == 1 && cnt >= n - 1); bool condition2 = (n % 3 == 0 && cnt == n - 1); if (condition1 || condition2) { cout << "No"; } else { cout << "Yes"; } } } return 0;}

    解释

    • 输入处理:读取测试用例数量t,每个用例读取堆数n和先手人选d。
    • 石子数统计:遍历每个堆,统计堆数为1的数量cnt。
    • 判断胜负
      • H先手时,如果cnt等于n且能被3整除,H必败(输出"No"),否则H可以胜利(输出"Yes")。
      • N先手时,检查是否满足两种必败条件之一:
        • 若n除3余1且1堆石子的数目大于等于n-1。
        • 若n除3余0且1堆石子的数目等于n-1。满足任何一种条件则N必败(输出"No"),否则N可以胜利(输出"Yes")。

    通过以上分析和代码,可以准确判断H和N在不同堆石分布下的胜负情况。

    转载地址:http://fzpaz.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | YOLO11自定义数据集训练实现缺陷检测 (标注+训练+预测 保姆级教程)
    查看>>
    OpenCV与AI深度学习 | 实战 | YOLOv10模型微调检测肾结石并提高准确率
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV确定对象的方向(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YOLOv8 Pose实现瑜伽姿势识别
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用姿态估计算法构建简单的健身训练辅助应用程序
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于OpenCV和K-Means聚类实现颜色分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YoloV5和Mask RCNN实现汽车表面划痕检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9和OpenCV实现车辆跟踪计数(步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 文本图片去水印--同时保持文本原始色彩(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 通过微调SegFormer改进车道检测效果(数据集 + 源码)
    查看>>
    OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
    查看>>
    OpenCV与AI深度学习 | 实用技巧 | 使用OpenCV进行模糊检测
    查看>>
    OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
    查看>>
    OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
    查看>>