zoukankan      html  css  js  c++  java
  • BZOJ 1088: [SCOI2005]扫雷Mine

    Description

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

    Input

      第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)

    Output

      一个数,即第一列中雷的摆放方案数。

    Sample Input

    2
    1 1

    Sample Output

    2
     
     1 我们首先会想到直接枚举 
     2 棋盘只有n行2列 第二列已经给出 
     3 那么我们可以枚举第一列每个位置有雷无雷的情况
     4 每个位置有两种情况
     5 复杂度有O(2^n*n) !!!
     6 
     7 那么 观察可以发现 我们已知第二列的雷 
     8 就可以用第二列的数字来判断 某个位置是否有雷
     9 
    10     A a
    11     B b
    12     C c
    13     D d
    14     E e
    15   如果确定了A 那么可以推出B
    16   如果确定了B 根据a,b,A,B 可以推出C
    17 
    18 也就是当前两个位置确定后那么整列雷的位置都确定了——可证
    19 
    20 那么第一个位置有两种情况 那就是有雷和无雷 
    21 
    22 所有也就最多两种情况
     1 #include<cstdio>
     2 #include<iostream>
     3 #define MAXN 10010
     4 
     5 using namespace std;
     6 
     7 int a[MAXN],n;
     8 
     9 inline int check(int now) {//now戴表当前位置是否有雷
    10     int last=0;//last上一个位置是否有雷
    11     for(int i=1;i<n;i++) {
    12         int next=a[i]-last-now;//下一个位置是否有雷
    13         if(next<0||next>1) return 0;//当前情况合不合法
    14         last=now;
    15         now=next;
    16     }
    17     if(last+now!=a[n]) return 0;//最后一个格子合不合法
    18     else return 1;
    19 }
    20 
    21 int main() {
    22     scanf("%d",&n);
    23     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    24     printf("%d
    ",check(0)+check(1));
    25     return 0;
    26 }


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    边缘检测
    图片融合
    毛玻璃
    图像添加马赛克
    图像颜色反转
    图像灰度处理
    图像仿射变换/旋转
    图像剪切/位移
    图像缩放/插值
    神经网络逼近股票价格
  • 原文地址:https://www.cnblogs.com/whistle13326/p/6819464.html
Copyright © 2011-2022 走看看