当前位置: 首页 > 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内存区域与内存溢出
  • 【笔记】你不知道的JS读书笔记——Promise
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 4个实用的微服务测试策略
  • Android Volley源码解析
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ComponentOne 2017 V2版本正式发布
  • EOS是什么
  • Javascript弹出层-初探
  • Just for fun——迅速写完快速排序
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Node 版本管理
  • Python利用正则抓取网页内容保存到本地
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SQLServer之索引简介
  • VUE es6技巧写法(持续更新中~~~)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 猴子数据域名防封接口降低小说被封的风险
  • 技术:超级实用的电脑小技巧
  • 强力优化Rancher k8s中国区的使用体验
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微信支付JSAPI,实测!终极方案
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 带你开发类似Pokemon Go的AR游戏
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (2015)JS ES6 必知的十个 特性
  • (3)(3.5) 遥测无线电区域条例
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (一)Dubbo快速入门、介绍、使用
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net FrameWork简介,数组,枚举
  • .Net FrameWork总结