# include<stdio.h>
# include<stdlib.h>
long run(char **a,int num);
long s(int flag);
int main(void)
{
int num;
while(scanf("%d",&num)==1&&num!=0)
{
char **a=(char **)calloc(num,sizeof(char *));
for(int i=0;i<num;i++)
{
fflush(stdin);
*(a+i)=(char *)calloc(2*num+2,sizeof(char));
gets(*(a+i));
}
printf("%ld\n",run(a,num));
}
return 0;
}
long s(int flag)
{
long i=0;
int j=1;
while(flag>0)
{
i=i+j;
j+=2;
flag--;
}
return i;
}
long run(char **a,int num)
{
//判斷1
if(num==1)
{
if(*(*(a))=='O')
return 1;
else
return 0;
}
//判斷二
if(num==2)
{
if(*(*(a)+1)=='O')
{
if(*(*(a)+0)=='O'&&*(*(a)+2)=='O'&&*(*(a+1)+1)=='O')
{return 4;}
else if(*(*(a)+0)=='O'||*(*(a)+2)=='O'||*(*(a+1)+1)=='O')
{
return 1;
}
else
{
return 0;
}
}
else
{
if(*(*(a)+0)=='O'||*(*(a)+2)=='O'||*(*(a+1)+1)=='O')
{
return 1;
}
else
{
return 0;
}
}
}
//大于等于三的情況
int i;
int j;
int flag=0;
int *b=(int *)calloc(2*num-1,sizeof(int));
for(i=0;i<2*num-1;)
{
if(*(*(a+0)+i)=='O')
{
*(b+i)=1;
flag=1;
}
else
{
*(b+i)=0;
}
i+=2;
}
for(i=1;i<=num-1;i++)
{
for(j=i;j<2*num-i-1;)
{
if(*(*(a+i)+j)=='O')
{
if(*(*(a+i-1)+j)=='O')
{
*(b+j)=*(b+j-1)>*(b+j+1)?(*(b+j+1)+1):(*(b+j-1)+1);
flag=flag>*(b+j)?flag:*(b+j);
}
else
{
*(b+j)=1;
flag=flag>1?flag:1;
}
}
else
{
*(b+j)=0;
}
j+=2;
}
}
delete b;
delete a;
return s(flag);
}
uj5u.com熱心網友回復:
http://cstest.scu.edu.cn/soj/problem.action?id=2800題目網址 很簡單的DP單一直WR 郁悶 求給資料轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123325.html
標籤:茶館
上一篇:遠程開機的代碼怎么寫才是正確的?
下一篇:初學c++
