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

Posted caomingpei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于CodeForces 825B(模拟&贪心_D题)解题报告的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 452D [模拟][贪心]

Codeforces 980 并查集/模拟贪心最小字典序

CodeForces-1253B(贪心+模拟)

Leaving Auction CodeForces - 749D (set,贪心,模拟)

Codeforces Round #481 (Div. 3) G. Petya's Exams (贪心,模拟)

(模拟+贪心)codeforces - 733C Epidemic in Monstropolis