• bzoj2940: [Poi2000]条纹


    2940: [Poi2000]条纹
    条纹游戏是一个双人的游戏。所需要的物品有一个棋盘以及三种颜色的长方形条纹,这三种颜色分别是红色、绿色和蓝色。所有的红色条纹的尺寸是c*1,所有的绿色条纹的尺寸是z*1,所有的蓝色条纹的尺寸是n*1,这里c,z,n是正整数。每种颜色的条纹每个游戏者都拥有无限多个。
    一个棋盘是一个尺寸为p*1的长方形,由p个1*1的方格组成。
    游戏者轮流走,每一步都是由一个游戏者任选一种长方形条纹覆盖到棋盘上,并要求遵循以下规则:
    条纹不能伸出棋盘之外。
    不能覆盖在已有的条纹之上(即使部分也不行)。
    条纹的边缘必须与棋盘方格的边缘相重叠。谁不能再走,谁就输了。

    先手是指在游戏中第一个走的游戏者。那么是否不管后手怎么走,先手都有必胜策略呢?
    任务:
    写一个程序:
    读入条纹的尺寸以及至少一个棋盘的尺寸。
    对每一个给出的棋盘判断先手是否必胜。
    将结果输出。
    input
    第一行包含三个整数c,z,n(1<=c,z,,n<=1000),表示三种条纹的长度,依次为红色,绿色以及蓝色。每两个数之间都用空格隔开。
    文件的第二行包括一个整数m(1 <= m <= 1000)表示需要考虑的不同棋盘个数。以下3到m+2行每行包括一个整数p(1<=p<=1000)。第i+2行表示第i个棋盘的长度。
    output
    应当包含m行。只有一个数字应当被写入文件的第i行:
    1—如果对第i个棋盘先手有必胜策略。
    2—其它。

    一个典型的博弈论题

    可以知道只有最大和最小的两种条纹是有意义的

    从三个颜色中选出长度最大和最小的两个分别记为l,r其中(l<=r)。

    0 ~ L-1 必败
    L ~ R+L-1 必胜
    R+L ~ R+2L-1 必败
    R+2L ~ 2R+2L-1 必胜
    容易得出结论进行递推

    代码可以网上搜索

  • 相关阅读:
    十张伟大的科学瞬间
    机器学习如何破译早已消亡的古老语言?
    如何阻止「数码黑帮」偷走你的时间
    社会地位即服务, Status as a Service (二): 社交网络的投资回报率 (ROI)
    谁是你的创业竞争对手?
    酷!美国国家安全局(NSA)开源了逆向工程工具 Ghidra
    Linux终端下Ctrl+S卡死
    操作系统损坏重装是否能恢复lvm硬盘数据的相关实验
    How to write an iso file to usb driver
    linux screen的用法
  • 原文地址:https://www.cnblogs.com/awipppp/p/5956539.html
Copyright © 2020-2023  润新知