CodeForces 825B(模拟&贪心_D题)解题报告

题目链接:http://codeforces.com/problemset/problem/825/B

--------------------------------------------------------------------------------

题意:五子棋,在输入条件下,能否在当前局面获胜。

思路:很明显的是,当我们下五子棋时,我们每步都是进行一次搜索,观察能否连接成为5个。同理,利用计算机也可以向各个方向进行搜索。好在本题只是10X10的棋面,直接对每个点进行4个方向(水平,竖直,主对角线,次对角线)进行暴力。遇到非'X'的符号停止。

代码:

#include<cstdio>
using namespace std;
const int MAXN=10+5;
char a[MAXN][MAXN];

int main(void){
    int flag =0;
    for(int i=0;i<10;i++){
            scanf("%s",&a[i]);
    }
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            if(a[i][j]=='.'){
                int sum =0;
                for(int t =1;t<=4&&(j-t)>=0;t++){
                    if(a[i][j-t]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
                for(int t =1;t<=4&&(j+t)<10;t++){
                    if(a[i][j+t]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
                sum =0;
                for(int t =1;t<=4&&(i-t)>=0;t++){
                    if(a[i-t][j]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
                for(int t =1;t<=4&&(i+t)<10;t++){
                    if(a[i+t][j]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
                sum =0;
                for(int t =1;t<=4&&(i-t)>=0&&(j-t)>=0;t++){
                    if(a[i-t][j-t]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
                for(int t =1;t<=4&&(i+t)<10&&(j+t)<10;t++){
                    if(a[i+t][j+t]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
                 sum =0; 
                for(int t =1;t<=4&&(i-t)>=0&&(j+t)<10;t++){
                    if(a[i-t][j+t]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
                for(int t =1;t<=4&&(i+t)<10&&(j-t)>=0;t++){
                    if(a[i+t][j-t]!='X') break;
                    else sum++;
                    if(sum >=4) flag =1;
                }
        
            }
        }
    }
    if(flag ==1) printf("YES\n");
    else printf("NO\n");
    return 0;

}
View Code

 

posted @ 2018-01-21 19:52  caomp  阅读(149)  评论(0)    收藏  举报