牛客始战

链接:https://ac.nowcoder.com/acm/contest/3667/C
来源:牛客网

天地不仁,以万物为刍狗。
东汉末年,群雄并起。十八路诸侯各自为战,为得一地一城,大肆征战,民众死伤无数。
诸葛亮密如神鬼,疾如风雷。进不可挡,退不可追。昼不可攻,夜不可袭。多不可敌,少不可欺。前后应会,左右指挥。移五行之性,变四时之令。
神人也。
现,亮得诸侯割据图。亮根据此图,预测第一战将会在何处爆发。
此图由n*m个单位组成,图中有n个诸侯的根据地所在地,每个诸侯只会在第一天都会向自己根据地的上下左右方向霸占土地。当两个诸侯霸占到同一块土地时,那么此两诸侯就会开战。现问第一场战役将会在何处爆发!
注意:此土地被霸占的前提条件是在这一天还未被别的诸侯霸占,如果已经被别的诸侯霸占了,那么他就无法霸占了,当然也不会开战,因为谁先到,就是谁的土地。但是如果这块土地,是一起到达的,那么就会开战。

输入描述:

多组输入
n,m表示此图由n行m列组成 (1<= n,m<= 100),左上角的坐标是(1,1).
下跟n行m列矩阵,矩阵由*和#组成,一个#代表着一个诸侯,*代表此土地待征服。 保证割据图中最多只有十八位诸侯,最少没有诸侯。

输出描述:

输出第一场战争的(x,y)坐标 
如果不会爆发战争,请输入-1. 
如果多个地方同时爆发第一场战争,那么请先按x排序,再按y排序,依次输出。
如果爆发战争输出格式为:
1 2
2 5
此表示第一场战争将在(1,2)和(2,5)两个点爆发。
示例1

输入

复制
5 5
*****
****#
*****
*****
****#
6 8
###*#*#*
**#*****
********
********
********
********

输出

复制
-1
1 4
1 6
2 2

#include<bits/stdc++.h>
using namespace std;
char a[105][105];
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        memset(a,'\0',sizeof(a));
        for(int i=0;i<n;i++){
            scanf("%s",a[i]);
        }
        int flag=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(a[i][j]=='*'){
                    int k=0;
                    if(a[i][j-1]=='#'){
                        k++;
                    }
                    if(a[i][j+1]=='#'){
                        k++;
                    }
                    if(a[i-1][j]=='#'){
                        k++;
                    }
                    if(a[i+1][j]=='#'){
                        k++;
                    }
                    if(k>=2){
                        printf("%d %d\n",i+1,j+1);
                        flag=1;
                    }
                }
                
            }
        }
        if(flag==0){
            printf("-1\n");
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lipu123/p/12153821.html
今日推荐