Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на блоки (UVa), Симуляционная проблема 
:(
    Опции темы
sQu1rr
Дата 11.7.2011, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Здрастье, уважаемые программисты.
Столкнулся с симуляционной задачей на сайте http://uva.onlinejudge.org/
Ссылка тут: http://uva.onlinejudge.org/index.php?optio...&problem=37

Помогите найти ошибку, потому что вроде как все должно работать  smile
Сайт же говорит, что программа выдает неверный ответ

Зааранее спасибо
Код

#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;
}

PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.