CodeForces 831A(模拟&贪心_E题)解题报告

题目链接:http://codeforces.com/problemset/problem/831/A

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

题意:问是否为这样的一组队列,满足:先增,后不变,再减少。注意边界条件。

思路:似乎可以直接对每个点进行测试,由于数据较少,能够完成。然而,比较好的解法应该采用模拟的方式,按照所要求的方式,进行模拟操作,“哨兵”能够到达最后点时证明该队列能够满足条件。

注意:开数组时往往会开大一些,然而本题需要在最后设置一个终点,防止比较时候超出比较范围。

代码:

#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:57  caomp  阅读(139)  评论(0)    收藏  举报