SRM144DIV1

 1  #include  < iostream >
 2  #include  < vector >
 3  #include  < string >
 4  #include  < algorithm >
 5  using   namespace  std ;
 6 
 7  class  BinaryCode
 8  {
 9  public :
10      vector < string >  decode(  string  message )
11      {
12          vector < string >  revec ; 
13          revec.clear() ;
14 
15           int  num[ 100 =  { 0 } ; 
16           for int  i = 0 ; i < message.length(); i ++  )
17          {
18              num[i + 1 =  message[i]  -   ' 0 '  ;
19          }
20 
21           int  ans[ 100 =  { 0 } ;
22           // case 1 :
23          ans[ 1 =   0  ;  bool  none  =   false  ;
24           for int  i = 2 ; i <= message.length(); i ++  )
25          {
26              ans[i]  =  num[i - 1 -  ans[i - 1 -  ans[i - 2 ] ;
27               if ( ans[i]  <   0   ||  ans[i]  >   1  ) none  =   true  ;
28          }
29 
30           int  final  =  message.length() ;
31           if ( num[final]  !=  ans[final - 1 +  ans[final]  ||  none )
32          {
33               // revec[0] = "NONE" ;
34              revec.push_back(  " NONE "  ) ;
35          }
36           else
37          {
38               string  str ; str.clear() ;
39               for int  i = 1 ; i <= message.length(); i ++  )
40              {
41                  str  +=  (ans[i] + ' 0 ' ) ;
42              }
43              revec.push_back( str ) ;
44          }
45 
46           // case 2 :
47          ans[ 1 =   1  ; none  =   false  ;
48           for int  i = 2 ; i <= message.length(); i ++  )
49          {
50              ans[i]  =  num[i - 1 -  ans[i - 1 -  ans[i - 2 ] ;
51               if ( ans[i]  <   0   ||  ans[i]  >   1  ) none  =   true  ;
52          }
53 
54          final  =  message.length() ;
55           if ( num[final]  !=  ans[final - 1 +  ans[final]  ||  none )
56          {
57              revec.push_back(  " NONE "  ) ;
58          }
59           else
60          {
61               string  str ; str.clear() ;
62               for int  i = 1 ; i <= message.length(); i ++  )
63              {
64                  str  +=  (ans[i] + ' 0 ' ) ;
65              }
66              revec.push_back( str ) ;
67          }
68 
69           return  revec ;
70      }
71  };
72 
73  int  main()
74  {
75       string  inn ;
76       while ( cin  >>  inn )
77      {
78          BinaryCode  * bin  =   new  BinaryCode() ;
79 
80          vector < string >  vec  =  bin -> decode( inn ) ;
81 
82          cout  <<  vec[ 0 <<  endl ;
83          cout  <<  vec[ 1 <<  endl ;
84      }
85       return   0  ;
86  }

你可能感兴趣的:(SRM144DIV1)