• 扫雷(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.
  • 相关阅读:
    java内部类与其他类变量之间的调用方式
    java线程数设置和系统cpu的关系
    IDEA设置方法自动显示参数提示
    (十)学生课程表查询
    (九)协处理器
    (八)filter的使用
    (七)多线程写入数据
    (六)mapreduce和Hbase集成
    (五)阅读推荐
    (四)region代码实现
  • 原文地址:https://www.cnblogs.com/PengBoLiuXu/p/4609718.html
Copyright © 2020-2023  润新知