ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1124. Мозаика

WA #12, T_T Give me some tests plz
Послано Latina_Matrix 20 ноя 2008 06:47
This is my program, i tried to fix it 4 6 hours. But no fault's detected. Help me plz....

-----------------------
#include <stdio.h>
#include <math.h>

#include <iostream>

using namespace std;

#define DEBUG 0
#define MaxM 510

int t;
int m, n;
int cnt;

int ou[ MaxM];
int a[ MaxM][ MaxM];

void readInput()
{
       cin >> m >> n;

    cnt = 0;
    memset( a, 0, sizeof( a));
    memset( ou, 0, sizeof( ou));

    for( int i = 1; i <= m; i ++)
        for( int j = 0; j < n; j ++)
        {
            cin >> t;
            if( t != i)
            {
                a[ i][ t] ++;
                ou[ i] ++;
            }
        }
}

void visit( int index)
{
    if( DEBUG)
    {
        cout << "---> " << index;
    }

    for( int i = 1; i <= m; i ++)
        if( a[ index][ i] != 0 && ou[ i] > 0)
        {
            cnt ++;
            ou[ index] --;
            a[ index][ i] --;

            visit( i);
            return ;
        }

    for( int i = 1; i <= m; i ++)
        if( a[ index][ i] != 0)
        {
            cnt ++;
            ou[ index] --;
            a[ index][ i] --;

            visit( i);
            return ;
        }
}

int main()
{
    if( DEBUG)
    {
        freopen( "mosaic.in", "r", stdin);
        freopen( "mosaic.ou", "w", stdout);
    }

    readInput();

    for( int i = 1; i <= m; i ++)
        while( ou[ i] % 2 != 0)
        {
            cnt ++;
            visit( i);

            if( DEBUG)
            {
                cout << endl;
            }
        }

    for( int i = 1; i <= m; i ++)
        while( ou[ i] != 0)
        {
            cnt ++;
            visit( i);

            if( DEBUG)
            {
                cout << endl;
            }
        }

    if( cnt > 0)
        cout << cnt-1 << endl;
    else
        cout << cnt << endl;

    return 0;
}