USACO Section 1.3 : Calf Flac

# include  < stdio.h >
char  s[ 20001 ],maxwords[ 2001 ];
int  maxlen = 0 ,len;
int  right ( int  i)
{
   
if  (((s[i] <= ' Z ' ) && (s[i] >= ' A ' )) || ((s[i] <= ' z ' ) && (s[i] >= ' a ' )))
      
return  ( 1 );
   
return  ( 0 );
}

int  copy( int  lx, int  rx)
{
   
int  i,j;
   
for  (i = lx,j = 0 ;i <= rx;i ++ ,j ++ )
      maxwords[j]
= s[i];
   maxwords[j]
= ' \0 ' ;
   
return  ( 0 );
}

int  wordcmp ( int  x, int  y)
{
   
if  (s[x] == s[y])  return  ( 1 );
   
if  (s[x] - s[y] == 32 return  ( 1 );
   
if  (s[y] - s[x] == 32 return  ( 1 );
   
return  ( 0 );
}

int  huiwen ( int  lx, int  rx)
{
   
int  i,j,total;
   i
= lx,j = rx;
   
if  (i == j) total =- 1 ;
   
else  total = 0 ;
   
while  (i >= 0 && j <= len)
   {
      
for  (;i >= 0 &&! right(i);i -- );
      
for  (;j <= len &&! right(j);j ++ );
      
if  ( ! wordcmp(i,j))
      {
         
if  (total > maxlen)
         {
            maxlen
= total;
            j
-- ;
            
for  (i ++ ; ! right(i);i ++ );
            i
-- ;
            copy(i,j);
            }
         
return  ( 0 );
         }
      total
+= 2 ;
      
if  (total > maxlen)
      {
         maxlen
= total;
         copy(i,j);
         }
      i
-- ;
      j
++ ;
      }
   
return  ( 0 );
}



main ()
{
   FILE 
* in = fopen ( " calfflac.in " , " r " );
   FILE 
* out = fopen( " calfflac.out " , " w " );
   
int  i,j;
   
for (i = 0 ; ! feof( in );i ++ )
      s[i]
= fgetc( in );
   s[i]
= ' \0 ' ;
   len
= strlen(s);
   
for  (i = 0 ;i < len;i ++ )
   {
      
if  (right(i))
      {
         huiwen (i,i);
         
for  (j = i - 1 ;j >- 0 &&! right(j);j -- );
         
if  (j >= 0 ) huiwen(j,i);
         
for  (j = i + 1 ;j <= len &&! right(j);j ++ );
         
if  (j <= len) huiwen (i,j);
         }
      }
   fprintf (
out , " %d\n%s\n " ,maxlen,maxwords);
   fclose(
in );
   fclose(
out );
   exit(
0 );
}

转载于:https://www.cnblogs.com/vistach/archive/2009/08/01/1536641.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值