Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
4.2 kB
16
Indexable
Never
#include <stdio.h>

int main(void)
{
    int T,N,M,i,j,k,o,ns,o_row,ns_row,o_column,ns_column,x,y;
    char wood[1000][1000]={'\0'};
    char o_quantity[1000],ns_quantity[1000];
    scanf("%d",&T);
    for(i=0;i<T;i++)
    {
        scanf("%d %d",&N,&M);
        for(j=0;j<N;j++)
        {
            scanf("%s",wood[j]);
        }

        for(j=0;j<N;j++)
        {
            o=0;
            ns=0;
            x=0;
            y=0;
            for(k=0;k<M;k++) //橫排
            {
                if(wood[j][k]=='o' && wood[j][k+1]=='o') //一個oo時+1
                {
                    x=x+1;
                }
                if(wood[j][k]=='o' && wood[j][k+1]=='#' && x+1>o) //遇到o#且連續的個數大於之前的連續個數(o),就取代之前那個數,將x還原
                {
                    o=x+1;
                    x=0;
                }
                if(wood[j][k]=='o' && wood[j][k+1]=='\0' && x+1>o) //遇到o結尾且連續的個數大於之前的連續個數(o),就取代之前那個數,將x還原
                {
                    o=x+1;
                    x=0;
                }
                if(wood[j][k]=='#' && wood[j][k+1]=='#') //下三行原理同上三行
                {
                    y=y+1;
                }
                if(wood[j][k]=='#' && wood[j][k+1]=='o' && y+1>ns)
                {
                    ns=y+1;
                    y=0;
                }
                if(wood[j][k]=='#' && wood[j][k+1]=='\0' && y+1>ns)
                {
                    ns=y+1;
                    y=0;
                }
            }
            o_quantity[j]=o; //將同一橫排最大的連續個數存起來
            ns_quantity[j]=ns;
        }

        o_row=0;
        ns_row=0;
        for(j=0;j<N;j++)
        {
            if(o_quantity[j]>o_row) //比較不同橫排的最大連續個數,找出MAX
            {
                o_row=o_quantity[j];
            }
            if(ns_quantity[j]>ns_row)
            {
                ns_row=ns_quantity[j];
            }
        }

        for(k=0;k<M;k++)
        {
            o=0;
            ns=0;
            x=0;
            y=0;
            for(j=0;j<N;j++) //直排,原理皆同上
            {
                if(wood[j][k]=='o' && wood[j+1][k]=='o')
                {
                    x=x+1;
                }
                if(wood[j][k]=='o' && wood[j+1][k]=='#' && x+1>o)
                {
                    o=x+1;
                    x=0;
                }
                if(wood[j][k]=='o' && wood[j+1][k]=='\0' && x+1>o)
                {
                    o=x+1;
                    x=0;
                }
                if(wood[j][k]=='#' && wood[j+1][k]=='#')
                {
                    y=y+1;
                }
                if(wood[j][k]=='#' && wood[j+1][k]=='o' && y+1>ns)
                {
                    ns=y+1;
                    y=0;
                }
                if(wood[j][k]=='#' && wood[j+1][k]=='\0' && y+1>ns)
                {
                    ns=y+1;
                    y=0;
                }
            }
            o_quantity[k]=o; //將同一直排最大的連續個數存起來
            ns_quantity[k]=ns;
        }

        o_column=0;
        ns_column=0;
        for(k=0;k<M;k++)
        {
            if(o_quantity[k]>o_column) //比較不同直排的最大連續個數,找出MAX
            {
                o_column=o_quantity[k];
            }
            if(ns_quantity[k]>ns_column)
            {
                ns_column=ns_quantity[k];
            }
        }

        if(o_row>o_column) //比較直排跟橫排 o的MAX,印出較大那個
        {
            printf("%d ",o_row);
        }
        else
        {
            printf("%d ",o_column);
        }
        if(ns_row>ns_column) //比較直排跟橫排 #的MAX,印出較大那個
        {
            printf("%d\n",ns_row);
        }
        else
        {
            printf("%d\n",ns_column);
        }
    }
    return 0;
}