码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-21 20:39:22      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:size   分享图片   force   计算机   代码   直接   图片   技术   ble   

题目链接: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

 

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

标签:size   分享图片   force   计算机   代码   直接   图片   技术   ble   

原文地址:https://www.cnblogs.com/caomingpei/p/8325209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!