Untitled
unknown
plain_text
4 years ago
4.2 kB
18
Indexable
#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; }
Editor is loading...