Здрастье, уважаемые программисты. Столкнулся с симуляционной задачей на сайте http://uva.onlinejudge.org/Ссылка тут: http://uva.onlinejudge.org/index.php?optio...&problem=37Помогите найти ошибку, потому что вроде как все должно работать  Сайт же говорит, что программа выдает неверный ответ Зааранее спасибо | Код | #include <iostream> #include <list> #include <vector> #include <string> #include <cstdlib> // atoi();
// typedefs typedef std::list< int > pile; typedef std::vector< pile > world; typedef std::pair< int, pile::iterator > place;
int main() { bool bMove, bOnto; // size int size; std::cin >> size;
// piles world w( size ); std::vector< place > p( size ); for( int i = 0; i != size; ++i ) { w[i].push_back( i ); p[i] = place( i, w[i].begin() ); }
// input std::string input; input.reserve( 4 );
std::cin >> input; while( input[0] != 'q' ) { // mover or pile bMove = ( input[0] == 'm' );
// a std::cin >> input; int a = atoi( input.c_str() );
// onto or over std::cin >> input; bOnto = ( input[1] == 'n' );
// b std::cin >> input; int b = atoi( input.c_str() );
// ignore or not if( a != b && p[a].first != p[b].first ) { // new place to insert (onto) pile::iterator new_place = p[b].second; new_place++;
if( bMove && bOnto ) { // move A onto B w[p[b].first].splice( new_place, w[p[a].first], p[a].second ); p[a].first = p[b].first; for( pile::iterator it = p[b].second; it != w[p[b].first].end(); ++it ) p[*it].second = it; } else if( bMove && !bOnto ) { // move A over B w[p[b].first].splice( w[p[b].first].end(), w[p[a].first], p[a].second ); p[a].first = p[b].first; p[a].second = w[p[b].first].end(); --p[a].second; } else if( !bMove && bOnto ) { // pile A onto B w[p[b].first].splice( new_place, w[p[a].first], p[a].second, w[p[a].first].end() ); for( pile::iterator it = p[b].second; it != w[p[b].first].end(); ++it ) { p[*it].first = p[b].first; p[*it].second = it; } } else { // pile A over B pile::iterator last_end = w[p[b].first].end(); last_end--;
w[p[b].first].splice( w[p[b].first].end(), w[p[a].first], p[a].second, w[p[a].first].end() ); for( pile::iterator it = last_end; it != w[p[b].first].end(); ++it ) { p[*it].first = p[b].first; p[*it].second = it; } } } std::cin >> input; }
for( int i = 0; i != size; ++i ) { std::cout << i << ":"; for( pile::iterator it = w[i].begin(); it != w[i].end(); ++it ) std::cout << " " << *it; std::cout << std::endl; }
return 0; }
|
|