B. Minesweeper
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

One day Alex decided to remember childhood when computers were not too powerful and lots of people played only default games. Alex enjoyed playing Minesweeper that time. He imagined that he saved world from bombs planted by terrorists, but he rarely won.

Alex has grown up since then, so he easily wins the most difficult levels. This quickly bored him, and he thought: what if the computer gave him invalid fields in the childhood and Alex could not win because of it?

He needs your help to check it.

A Minesweeper field is a rectangle n×m

, where each cell is either empty, or contains a digit from 1 to 8

, or a bomb. The field is valid if for each cell:

  • if there is a digit k

in the cell, then exactly k

  • neighboring cells have bombs.
  • if the cell is empty, then all neighboring cells have no bombs.

Two cells are neighbors if they have a common side or a corner (i. e. a cell has at most 8

neighboring cells).

Input

The first line contains two integers n

and m (1≤n,m≤100

) — the sizes of the field.

The next n

lines contain the description of the field. Each line contains m characters, each of them is "." (if this cell is empty), "*" (if there is bomb in this cell), or a digit from 1 to 8

, inclusive.

Output

Print "YES", if the field is valid and "NO" otherwise.

You can choose the case (lower or upper) for each letter arbitrarily.

Examples
Input

Copy
3 3
111
1*1
111
Output

Copy
YES
Input

Copy
2 4
*.*.
1211
Output

Copy
NO
Note

In the second example the answer is "NO" because, if the positions of the bombs are preserved, the first line of the field should be *2*1.

You can read more about Minesweeper in Wikipedia's article.

思路:简单搜索

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
//codeforces
using namespace std;
char maps[110][110];
int dir[8][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
int n,m;
int dfs(int x,int y)
{
    int tx,ty;
    if(maps[x][y]=='.'){
        for(int i=0;i<8;i++){
            tx=x+dir[i][0];
            ty=y+dir[i][1];
            if(tx<0||tx>=n||ty<0||ty>=m) continue;
            if(maps[tx][ty]=='*'){
                return 1;
            }
        }
    }
    int tmpe,countt=0;
    if(maps[x][y]<='8'&&maps[x][y]>='1'){
        tmpe=maps[x][y]-'0';
        for(int i=0;i<8;i++){
            tx=x+dir[i][0];
            ty=y+dir[i][1];
            if(tx<0||tx>=n||ty<0||ty>=m) continue;
            if(maps[tx][ty]=='*'){
                countt++;
            }
        }
        if(countt!=tmpe) return 1;
    }
    return 0;
}
int main()
{
    int flag;
    while(scanf("%d %d",&n,&m)!=EOF){
            flag=0;
    for(int i=0;i<n;i++){
        scanf("%s",maps[i]);
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(maps[i][j]=='.'){
                if(dfs(i,j)){
                        flag=1;
                    break ;
                }
            }
            if(maps[i][j]<='8'&&maps[i][j]>='1'){
                if(dfs(i,j)){
                    flag=1;break;
                }
            }
        }
    }
    if(flag) printf("NO\n");
    else printf("YES\n");
    }
    return 0;
}

Codeforces Round #483 (Div. 2) B题的更多相关文章

  1. Codeforces Round #483 (Div. 2)C题

    C. Finite or not? time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  2. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  3. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  4. Codeforces Round #713 (Div. 3)AB题

    Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...

  5. Codeforces Round #552 (Div. 3) A题

    题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...

  6. Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring

    D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  7. Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)

    题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...

  8. Codeforces Round #425 (Div. 2))——A题&&B题&&D题

    A. Sasha and Sticks 题目链接:http://codeforces.com/contest/832/problem/A 题目意思:n个棍,双方每次取k个,取得多次数的人获胜,Sash ...

  9. Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!]

    题目链接:http://codeforces.com/contest/984 A. Game time limit per test:2 seconds memory limit per test:5 ...

随机推荐

  1. ASP.NET MVC学习笔记 第一天

    MVC:Mode(模型).View(视图).Controller(控制器)         在服务器接收到请求(Request)时,路由(Routing)定义了应该调用的控制器,以及应该调用的控制器动 ...

  2. Creating dynamic/configurable parameterized queries in Entity Framework

    https://dillieodigital.wordpress.com/2013/05/09/creating-dynamicconfigurable-parameterized-queries-i ...

  3. jpa No Dialect mapping for JDBC type:-9

    1.自定义个一个继承SQLServerDialect的dialect类 public class MySQLServer2008Dialect extends SQLServer2008Dialect ...

  4. Python 生成器总结

    生成器的概念: 生成器不会把结果保存在一个系列中,而是保存在生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束 生成器是这样一个函数,它记住上一次返回时在函数体中的位 ...

  5. styling the SVG images

    SVG不像canvas,SVG的所有元素都是以DOM元素存在于文档中的,我们可以像给任何普通的dom元素添加css样式一样,可以对svg的元素做styling.不过SVG元素的css样式名称和普通ht ...

  6. 如何在 Azure 虚拟机里配置条带化

    什么是条带化(striping) 条带 (strip) 是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法.简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法. 许 ...

  7. 简说MVC Filter

    Filter与FilterProvider之间的关系 根据用途和执行时机的不同,MVC主要分为以下5种类型的过虑器:AuthenticationFilter.AuthorizationFilter.A ...

  8. [翻译] PQFCustomLoaders

    PQFCustomLoaders Current version: 0.0.1 Collection of highly customizable loaders for your iOS proje ...

  9. 最新php环境搭建,2017年最新PHP环境搭建

    使用PHPWAMP8.8.8.8IN纯绿色集成环境搭建php网站很方便,哪怕你系统没安装vc.系统dll丢失或者损坏的时候,phpwamp也可以正常启动,是个很强大的php套件. php环境搭建,支持 ...

  10. [EffectiveC++]item42:了解typename的双重意义