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

Обсуждение задачи 1005. Куча камней

why wrong???
Послано Islam Gamal 23 мар 2017 08:24
/* Here is my code */

#include <stdio.h>
#include <stdlib.h>//abs
#include <stdint.h>//uint32_t

#define MIN(X,Y) ( ((X)<(Y))? (X) :(Y) )
#define Array_Size(arr) (sizeof(arr)/sizeof(arr[0]))

uint32_t sum_continues(int f_index , int last_index , uint32_t *arr_num) ;
uint32_t sum_remain(int f_index , int last_index , int single_num_index , uint32_t *arr_num , int arr_size ) ;
uint32_t min_deff(uint32_t *arr_num , int arr_size);

int main()
{
      int arr_size ;

      scanf("%d" , &arr_size) ;
      while(getchar() != '\n') ;
      uint32_t arr_num[arr_size]  ;
      int i = 0 ;

      while(i<arr_size){
      scanf("%d " , &arr_num[i++]) ;
      }

      int min_def = min_deff(arr_num , arr_size);
      printf("%d" , min_def) ;

}


uint32_t sum_continues(int f_index , int last_index , uint32_t *arr_num)
{
    uint32_t sum = 0 ;
    for( int i = f_index ; i<last_index ; i++)
    {
        sum += arr_num[i] ;
    }
    return sum ;
}

uint32_t sum_remain(int f_index , int last_index , int single_num_index, uint32_t *arr_num , int arr_size )
{
    uint32_t sum =0 ;

    for(int i= 0 ; i<arr_size ; i++)
    {
        if( i == single_num_index || (i>= f_index && i<last_index ) ) continue ;
        sum += arr_num[i] ;
    }
    return sum ;
}

uint32_t min_deff(uint32_t *arr_num , int arr_size)
{
    uint32_t first_pile = 0  , sec_pile = 0 ;
    uint32_t min_def = UINT32_MAX ;
    int j ;

    for(int k = 0 ; k< (arr_size-1) ; k++)
        {
            for( int i = 0 ;  i< (arr_size-k)  ; i++)
            {
                if( k== 0 && i>0) break ;
                 uint32_t con_sum = sum_continues(i , i+k , arr_num) ;
                 for( j =i+k ; j<arr_size  ; j++)
                 {
                     first_pile = con_sum + arr_num[j] ;
                     sec_pile   = sum_remain(i , i+k , j , arr_num , arr_size) ;
                     min_def = MIN(abs(first_pile-sec_pile) , min_def) ;
                 }
            }
        }
        return min_def ;
}