ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1005. Stone Pile

why wrong???
Posted by Islam Gamal 23 Mar 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 ;
}