博客
关于我
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/

    你可能感兴趣的文章
    Mysql主从不同步
    查看>>
    mysql主从同步及清除信息
    查看>>
    MySQL主从同步相关-主从多久的延迟?
    查看>>
    mysql主从同步配置方法和原理
    查看>>
    mysql主从复制 master和slave配置的参数大全
    查看>>
    MySQL主从复制几个重要的启动选项
    查看>>
    MySQL主从复制及排错
    查看>>
    mysql主从复制及故障修复
    查看>>
    MySQL主从复制的原理和实践操作
    查看>>
    webpack loader配置全流程详解
    查看>>
    mysql主从复制,读写分离,半同步复制实现
    查看>>
    MySQL主从失败 错误Got fatal error 1236解决方法
    查看>>
    MySQL主从架构与读写分离实战
    查看>>
    MySQL主从篇:死磕主从复制中数据同步原理与优化
    查看>>
    mysql主从配置
    查看>>
    MySQL之2003-Can‘t connect to MySQL server on ‘localhost‘(10038)的解决办法
    查看>>
    MySQL之CRUD
    查看>>
    MySQL之DML
    查看>>
    Mysql之IN 和 Exists 用法
    查看>>
    MYSQL之REPLACE INTO和INSERT … ON DUPLICATE KEY UPDATE用法
    查看>>