当前位置: 首页 > news >正文

(博弈 sg入门)kiki's game -- hdu -- 2147

链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2147

题意:

    在一个n*m的棋盘上,从  (1,m),即右上角开始向左下角走。

       下棋者只能往左边(left),左下面(left-underneath),下面(underneath),这三个方格下棋。

最后不能移动的人算输 

思路: 
手动可以画出必胜态以及必败态的图 
可以很容易 找出规律 

(1) 所有终结点是必败点(P点);

  (2)从任何必胜点(N点)操作,至少有一种方法可以进入必败点(P点);

  (3)无论如何操作,从必败点(P点)都只能进入必胜点(N点).

由此可知 10*10之内的为   (完全可以手写出来) 

NNNNNNNNNN 
PNPNPNPNPN 
NNNNNNNNNN 
PNPNPNPNPN 
NNNNNNNNNN 
PNPNPNPNPN 
NNNNNNNNNN 
PNPNPNPNPN 
NNNNNNNNNN 
PNPNPNPNPN

可以看出  NN

                  PN  这样的规律    之后很容易知道怎么做了   

 

代码:

#include<stdio.h>
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m))
    {
        if(n==0&&m==0)break;
        if(n%2==1&&m%2==1)printf("What a pity!\n");
        else printf("Wonderful!\n");
    }
    return 0;
}

还可以用SG函数打表找出我们所要的结果NP 图

 

#include<stdio.h>
#include<string.h>
const int sz=200;
int SG[sz][sz];
int dir[3][2]={-1,0,0,1,-1,1};
int n,m;
void get_sg()
{
    int i,j;
    memset(SG,0,sizeof(SG));
      for(i=n;i>=1;i--)
        for(j=1;j<=m;j++)
      {
          if(!SG[i][j])
            for(int k=0;k<3;k++)
            {
              int xx=i+dir[k][0];
              int yy=j+dir[k][1];
               if(xx>=1&&xx<=n&&yy>=1&&yy<=m)
               {
                SG[xx][yy]=1;
               }
            }
      }
}
int main()
{
    int i,j;

    while(scanf("%d %d",&n,&m)!=EOF)
    {
        get_sg();
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++) if(SG[i][j]==1) printf("N"); else printf("P");
            printf("\n");
        }
        if(SG[1][m]==1)
        {
            printf("Wonderful!\n");
        }
        else printf("What a pity!\n");
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/YY56/p/4777353.html

相关文章:

  • Servlet/Jsp实现购物车
  • Servlet之过滤器Filter详解
  • select into from和insert into select from两种表复制语句区别
  • SendRedirect和forward的区别
  • Vim常用操作和快捷键技巧总结
  • 用JDBC编程的运行时错误及其解决大全
  • Myeclipse10.7连接SQL Server数据库技术
  • C++构造函数虚函数例题
  • Servlet过滤字符串的HTML特殊字符
  • PHP中print_r、var_export、var_dump区别
  • Jsp/Servlet根据请求参数自动填充Java对象:表单Bean
  • ORACLE 如何定位消耗资源的SQL
  • Servlet/Jsp实现当参数确实或缺失重新显示输入表单
  • Servlet/Jsp实现发送压缩Web页面 Gzip技术
  • Java内存区域与内存溢出
  • 网络传输文件的问题
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CEF与代理
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • k8s 面向应用开发者的基础命令
  • Object.assign方法不能实现深复制
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python学习之路16-使用API
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Solarized Scheme
  • 从输入URL到页面加载发生了什么
  • 关于springcloud Gateway中的限流
  • 官方解决所有 npm 全局安装权限问题
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 那些年我们用过的显示性能指标
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 应用生命周期终极 DevOps 工具包
  • 优秀架构师必须掌握的架构思维
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • !!Dom4j 学习笔记
  • # .NET Framework中使用命名管道进行进程间通信
  • #Linux(Source Insight安装及工程建立)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (02)Hive SQL编译成MapReduce任务的过程
  • (06)金属布线——为半导体注入生命的连接
  • (3)选择元素——(17)练习(Exercises)
  • (JS基础)String 类型
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .libPaths()设置包加载目录
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET 解决重复提交问题
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值