湿鲨和两个子序列的动态规划问题

问题描述

我曾尝试在黑客等级上尝试“鲨鱼问题” ,但经过多次尝试,我无法调试我的代码,以防在数据集较大的情况下输出错误

简短的问题陈述:给定一个数组( A ),查找所有长度相同的所有可能的子字符串 Xa Xb ,以使它们的总和为 S ,区别是 r

S = Xa + Xb r = Xa - Xb

链接到问题陈述:Wet Shark DP Problem

我的解决方案是:

void NMudServer::StartListening() {

    fd_set read_set;
    std::vector<SocketLib::Connection>::iterator itr;       
    std::vector<SocketLib::Connection>::iterator itr2;  
    TIMEVAL zerotime;
    zerotime.tv_usec = 0;
    zerotime.tv_sec = 0;
    char buffer[buf_len];
    int err;
    lsock.Listen( default_port );

    if( lsock.IsListening() ) {
        std::cout << "Telnet listening on port " << default_port << "." << std::endl;
    } else {
        std::cout << "Could not start Telnet listening socket! - Last error code: " << WSAGetLastError() << std::endl;
        return;
    }

    while( lsock.IsListening() ) {
        FD_ZERO( &read_set );
        FD_SET( lsock.GetSock(),&read_set );

        for( itr = connlist.begin(); itr != connlist.end(); ++itr ) {
            FD_SET( itr->GetSock(),&read_set );
        }
    
        int sel = select( 0x7FFFFFFF,&read_set,NULL,&zerotime );           

        if( sel > 0 ) {

            if( FD_ISSET( lsock.GetSock(),&read_set ) ) {
                SocketLib::DataSocket dsock = lsock.Accept();
                SocketLib::Connection conn( dsock,buf_len );           
                connlist.push_back( conn );
                conn.Send( "Hello!\r\n",8 );
            }           

            for( itr = connlist.begin(); itr != connlist.end(); ++itr ) {

                if( FD_ISSET( itr->GetSock(),&read_set ) ) {

                    err = itr->Receive();

                    if( err == -1 ) {
                        std::cout << "Socket receiving error!" << std::endl;
                        std::cout << "Error code: " << WSAGetLastError() << std::endl;
                        std::cout << "Exiting due to error." << std::endl;
                        CloseAllConnections(); // This is when the connection is closed. Need to only close the one connection.
                        break;
                    } else if( err == 0 ) {
                        itr->Close();
                        connlist.erase( itr );
                        --itr;
                    } else if( itr->IsReady() ) {
                        int size;
                        size = itr->GetData( buffer );

                        if( strcmp( buffer,"servquit\r\n" ) == 0 ) {
                            CloseAllConnections();
                        } else if( strcmp( buffer,"quit\r\n" ) == 0 ) {
                            itr->Close();
                            connlist.erase( itr ); // When you go to erase the last element,it errors
                            --itr;
                        } else {
                            // Echo back the data to all connections
                            for( itr2 = connlist.begin(); itr2 != connlist.end(); ++itr2 ) {                                        

                                if( itr2->GetSock() != itr->GetSock() ) {

                                    int err2;
                                    itr2->Send( buffer,size );

                                    if( err2 == -1 ) {
                                        std::cout << "Socket sending error: " << WSAGetLastError() << std::endl;
                                    }
                                } else {
                                    itr2->Send( "\r\n",2 );
                                }

                            } // end for
                        }// end if-else

                        itr->Reset();

                    } // end if-else-else

                } // end if
            } // end for
        } // end if sel
    } // end while
}

void NMudServer::CloseAllConnections() {
    lsock.Close();

    std::vector<SocketLib::Connection>::iterator itr;
    for( itr = connlist.begin(); itr != connlist.end(); ++itr ) {
        itr->Close();
    }

    WSACleanup();
}

一个失败的测试用例I / O:

输入: 100 500 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 185 320 482 325 134 212 305 407 159 457 158 385 146 129 317 317 190 283 230 485 493 1159 1092 1194 1113 1028 1073 1028 1007 1060 1034 1189 1043 1187 1005 1150 1105 1162 1114 1085 1185 1058 1176 1004 1160 1037 1183 1097 1045 1016 1094 1934 1875 1902 1902 1985 1985 1863 1968

预期输出: 433577823

CodeChef等其他IDE出现运行时错误

请您建议我哪里可能出问题了?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)