首页 > 其他分享 >CF36D New Game with a Chess Piece 题解

CF36D New Game with a Chess Piece 题解

时间:2023-08-24 15:24:47浏览次数:317  
标签:CF36D 题解 越界 Game 打表 Chess New

前言:

都大半年没在洛谷上提交过题解了。

SPOJ 上有双倍经验,题号为 SP7602。

我看题解区的大佬们有的正经用博弈论做,有的打表,但是感觉没有讲得很形象,这篇题解将生动讲述打表做法,同时为了让大家在感性理解后,还可以理性理解,会附上证明(这部分参考了别的题解)。

正文:

Step 1:打表找规律

令 \(b_{i,j}\) 表示从第 \(i\) 行第 \(j\) 列出发,是胜还是败。如果胜,\(b_{i,j}=1\),否则 \(b_{i,j}=0\)。

我们先不考虑越界的问题,如果 \(b_{i+1,j},b_{i,j+1},b_{i+k,j+k}\) 中至少有一个为零(具体意义就是,从第 \(i\) 行第 \(j\) 列出发可以走到一个对手会败的位置),那么 \(b_{i,j}=1\),否则 \(b_{i,j}=0\)。

也就是说,\(b_{i,j}=\lnot(b_{i+1,j} \bigwedge b_{i,j+1} \bigwedge b_{i+k,j+k})\)。

状态转移时,如果越界的话,那么那个越界的值就不参与运算,所以为了方便起见,可以设它为 1.

附上打表程序

为了直观,我先搞一张表来给大家解释:

0 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0
1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0
1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

标签:CF36D,题解,越界,Game,打表,Chess,New
From: https://www.cnblogs.com/mcDinic/p/17654184.html

相关文章

  • CF54C First Digit Law 题解
    题目传送门\(Solution\):一个比较简单的数位dp处理技巧加上一个暴力的dp。设\(p_i\)为区间\([l_i,r_i]\)中出现\(1\)开头的数的概率。考虑\(solve(x)\)函数为求出\([1,x]\)中开头为\(1\)的个数。显然低于\(x\)的位数的数是全部能取到的,这时候开头为\(1\)......
  • 题解 数数
    题目链接可持久化平衡树看上去很行的样子,但是我不会啊。。。先来考虑一个简化版的问题:求区间\([1,n]\)中\(\leH_i\)的元素个数。这显然是好做的,用权值树状数组就行。回到本题,显然:询问区间\([l,r]\)中\(\leH_i\)的个数,等价与区间\([1,r]\)的答案减去区间\([1,l-1]......
  • 国标视频云服务EasyGBS国标视频平台迁移服务器后无法启动的问题解决方法
    国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格......
  • P3742题解
    思路只需要让z串做到和y串一样,就得让y串每个字母(题意如此)均小于x串。所以只要x串有一项小于y串,那么就输出-1,否则输出y串。下面是核心代码:#include<bits/stdc++.h>usingnamespacestd;intn;stringx,y;intmain(){ cin>>n>>x>>y; for(inti=0;i<n;i++) { if(x[i]......
  • 【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失
    问题起因最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持。大意是可以把初始好的数据直接拿到平台上。经过本人在Linux虚机中启动MySQL容器导入数据再dockercommit出镜像部署到平台......
  • 「题解」Codeforces 825G Tree Queries
    点权转边权,把边权设为两个端点的\(\min\),然后发现询问\(x\)的答案,就是询问\(x\)与所有黑点的虚树,边权的\(\min\)是多少。假设要判定答案是否\(\geqk\),那么就是询问\(x\)只经过\(\geqk\)是否能到达所有黑点,于是想到建立Kruskal重构树,那么\(x\)与所有黑点的LCA......
  • 题解 P8816 [CSP-J 2022] 上升点列
    P8816[CSP-J2022]上升点列题目大意给定\(n\)个点,你可以任意添加\(k\)个点,从中选择若干点使得序列中任意相邻两点间的欧几里得距离恰好为\(1\)而且横坐标、纵坐标值均单调不减。换言之,求二维最长上升子序列。solution:很容易想到动态规划,根据最长上升子序列的套路,可以......
  • P1830题解
    思路:利用桶存储轰炸区域,双重循环。在存储轰炸区域时将次数刷新,也就是pos[j][k]=i;。下面是核心代码:for(inti=1;i<=x;i++){ intx1,x2,y1,y2; cin>>x1>>y1>>x2>>y2; for(intj=x1;j<=x2;j++) { for(intk=y1;k<=y2;k++) { vis[j][k]++; pos[j][k]=i; } }......
  • CF1820 & 1819 题解
    Div2A答案取决于_连续段长度,有一些细节,比如什么时候答案要加一减一,以及字符串是单独的^。Div2B首先先把全\(1\)串给特判掉。记将字符串视为首位相接的环的时,最大\(1\)连续段长度为\(x\),答案为\({\lfloor{x+1\over2}\rfloor}({\lfloor{x\over2}\rfloor+1})\)......
  • CF1681E Labyrinth Adventures 题解
    题意有一个\(n\timesn\)的方格图,坐标编号类似平面直角坐标系,左下角为\((1,1)\)。这个方格图被分成了\(n\)层,左下角\((1,1)\)为第一层,随后每层都向外拓展一圈,如下图就是\(n=5\)的时候的情况:层与层之间有墙隔开,但每层都有两个门,分别分布在该层顶部和右侧,门是双向的......