Section 1.3 - Calf Flac

 1  #include  < iostream >
 2 
 3  using   namespace  std;
 4 
 5  int  main()
 6  {
 7      freopen( " calfflac.in " " r " , stdin);
 8      freopen( " calfflac.out " " w " , stdout);
 9 
10       string  oristr;
11       string  newstr;
12       int  pos[ 20002 ];
13 
14       while  ( true )
15      {
16           char  c  =  getchar();
17           if  (c  ==  EOF)
18               break ;
19           else
20              oristr  +=  c;
21      }
22 
23       for  ( int  i  =   0 , n  =   0 ; i  <  oristr.size(); i ++ )
24           if  (isalpha(oristr[i]))
25              newstr  +=  tolower(oristr[i]), pos[n ++ =  i;
26 
27       int  ans_len  =   0 ;
28       int  ans_pos  =   0 ;
29       for  ( int  k  =   0 ; k  <  newstr.size(); k ++ )
30      {
31           int  i  =  k, j  =  k;
32 
33           while  (i  -   1   >=   0   &&  j  +   1   <  newstr.size()  &&  newstr[i  -   1 ==  newstr[j  +   1 ])
34              i  -=   1 , j  +=   1 ;
35           if  (j  -  i  +   1   >  ans_len)
36          {
37              ans_len  =  j  -  i  +   1 ;
38              ans_pos  =  i;
39          }
40 
41           if  (k  +   1   <  newstr.size()  &&  newstr[k]  ==  newstr[k  +   1 ])
42          {
43              i  =  k, j  =  k  +   1 ;
44               while  (i  -   1   >=   0   &&  j  +   1   <  newstr.size()  &&  newstr[i  -   1 ==  newstr[j  +   1 ])
45                  i  -=   1 , j  +=   1 ;
46               if  (j  -  i  +   1   >  ans_len)
47              {
48                  ans_len  =  j  -  i  +   1 ;
49                  ans_pos  =  i;
50              }
51          }
52      }
53 
54      cout  <<  ans_len  <<  endl;
55       for  ( int  i  =  pos[ans_pos], n  =   0 ; n  <  ans_len; i ++ )
56      {
57          cout  <<  oristr[i];
58           if  (isalpha(oristr[i]))
59              n ++ ;
60      }
61      cout  <<  endl;
62 
63       return   0 ;
64  }
65 

你可能感兴趣的:(Section 1.3 - Calf Flac)