codeforces 984 B. Minesweeper

题目链接:http://codeforces.com/contest/984/problem/B

题意:给你一个n*m的字符数组,包含1到9,‘*’和‘.’。如果每一个数字所在的九宫格里有数字这么多个‘*’且每一个‘.’的九宫格没有‘*’,输出YES,否则输出NO

分析:直接枚举判断就可以了

AC代码:

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 
 6 char a[105][105];
 7 bool judge(int x,int y,int d){
 8     int num=0;
 9     for(int i=-1;i<=1;i++){
10         for(int j=-1;j<=1;j++){
11             if(a[x+i][y+j]=='*'){
12                 num++;
13             }
14         }
15     }
16     if(num==d) return true;
17     return false;
18 }
19 int main(){
20     ios_base::sync_with_stdio(false);
21     cin.tie(0);
22     int n,m;
23     cin>>n>>m;
24     memset(a,'.',sizeof(a));
25     for(int i=1;i<=n;i++){
26         for(int j=1;j<=m;j++){
27             cin>>a[i][j];
28         }
29     }
30     int p=0;
31     for(int i=1;i<=n;i++){
32             if(p==1) break;
33         for(int j=1;j<=m;j++){
34             if(p==1) break;
35             if(a[i][j]>='1'&&a[i][j]<='8'){
36                 int d=a[i][j]-'0';
37                 if(!judge(i,j,d)){
38                     p=1;
39                     break;
40                 }
41             }
42             else if(a[i][j]=='.'){
43                 int d=0;
44                 if(!judge(i,j,d)){
45                     p=1;
46                     break;
47                 }
48             }
49             if(p==1){
50                 break;
51             }
52         }
53     }
54     if(p==0){
55         cout<<"YES"<<endl;
56     }
57     else {
58         cout<<"NO"<<endl;
59     }
60 
61 return 0;
62 }
View Code

 

posted @ 2018-05-18 13:34  BadboyQAQ  阅读(183)  评论(0编辑  收藏  举报