• 扫雷(BZOJ1088) 题解


    【问题描述】

        相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。

    【样例输入】

        2
        1 1

    【样例输出】

        2

    【解题思路】

        本题为SCOI2005的题,其实我们可以直接模拟就行了,如果对于第二列的第一个数,我们可以确定下来第一列的第一个和第二个数的情况,然后接下来的第一列的数就用第二列的这个数去减就好了,那么最终我们如果碰到了与之不相符的情况,就说明无法满足,可以证明,每种情况最多只有两种方案。

    【代码实现】

     1 var a,b:array[1..10000] of 0..3;
     2     i,j,n,ans:longint;
     3 function pd:longint;
     4 var i:longint;
     5 begin
     6  for i:=2 to n-1 do
     7   begin
     8    if a[i]-b[i]-b[i-1]<0 then
     9     exit(0)
    10    else
    11     b[i+1]:=a[i]-b[i]-b[i-1];
    12   end;
    13  if b[n-1]+b[n]-a[n]<>0 then
    14   exit(0);
    15  exit(1);
    16 end;
    17 begin
    18  readln(n);
    19  for i:=1 to n do
    20   read(a[i]);
    21  case a[1] of
    22   0:ans:=ans+pd;
    23   1:
    24    begin
    25     b[1]:=1;
    26     ans:=ans+pd;
    27     fillchar(b,sizeof(b),0);
    28     b[2]:=1;
    29     ans:=ans+pd;
    30    end;
    31   2:
    32    begin
    33     b[1]:=1;
    34     b[2]:=1;
    35     ans:=ans+pd;
    36    end;
    37  end;
    38  writeln(ans);
    39 end.
  • 相关阅读:
    Mysql之修改mysql的视图定义者
    JQ对页面中某个DIV的大小变化进行监听拓展
    php网站性能优化
    nginx媒体服务器搭建
    windows配置多用户远程登录
    Tunnel Warfare HDU 1540
    好迷茫
    nginx部署vue前端项目实操(node安装,及安装vuecli/vue脚手架)
    .NET 基础
    docker 安装gitlab及配置cicd
  • 原文地址:https://www.cnblogs.com/PengBoLiuXu/p/4609718.html
Copyright © 2020-2023  润新知