当前位置:编程学习 > C/C++ >>

topcoder-srm144-div

[cpp] 
#include <string>  
#include <vector>  
#include <iostream>  
using namespace std;  
  
  
class BinaryCode{  
    public:  
        vector<string> decode(string message){  
  
            //prepare the basic return value  
            vector<string> result;  
            result.push_back( "NONE" );  
            result.push_back( "NONE" );  
  
            if( message.empty() )  
                return result;  
  
            /* set down the value that can be deducted form 0 or 3 */  
            string module;  
            for( int i=0; i<message.length(); ++i)  
                module.push_back( 'x' );  
  
            for( int i=0; i<message.length(); ++i ){  
                if( message[i] == '0' ){  
                    module[i] = '0';  
                    if( i-1 >= 0 )  
                        module[i-1] = '0';  
                    if( i+1 < message.length() )  
                        module[i+1] = '0';  
                }  
                else if( message[i] == '3' ){  
                    module[i] = '1';  
                    if( i-1 >= 0 )  
                        module[i-1] = '1';  
                    if( i+1 < message.length() )  
                        module[i+1] = '1';                
                }  
            }  
  
            /* set down the value can be deducted from 1 or 2 */  
            for( int k=0; k<=1; ++k ){  
                if( module[0] != '1'- k ){  
  
                    string tmp = module;  
  
                    /* process the [0] unit */  
                    tmp[0] = '0'+ k;  
  
                    /* process the [1] unit */  
                    char ch = message[0] - tmp[0] + '0';  
                    /*事实上ch可能算出2来,如message="22111",tmp[0]='0'*/  
                    if( ch!='0' && ch!='1' ){  
                        goto nosolution;      
                    }  
                    if( (module[1] != 'x') && (ch!=module[1]) ){  
                        goto nosolution;  
                    }  
                    else{  
                        tmp[1] = ch;  
                    }  
  
  
                    /* process [2]..[length-1] units */  
                    for( int i=2; i<tmp.length(); ++i ){  
                        ch = message[i-1] - tmp[i-1] - tmp[i-2] + '0' + '0';  
                        if( ch!='0' && ch!='1' ){  
                            goto nosolution;  
                        }  
                        if( (module[i] != 'x') && (ch != module[i]) ){  
                            goto nosolution;                          
                        }  
                        else{  
                            tmp[i] = ch;  
                        }  
                    }  
                  
                    /*add it to the result*/  
                    result[k] = tmp;  
                    nosolution: ;  
                }  
            }  
            return result;  
        };  
    private:  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,