ok
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* Complete the 'equalStacks' function below.
*
* The function is expected to return an INTEGER.
* The function accepts following parameters:
* 1. INTEGER_ARRAY h1
* 2. INTEGER_ARRAY h2
* 3. INTEGER_ARRAY h3
*/
void reverse(int [], int);
int min(int, int, int);
void sumArray(int [], int [], int);
int search(int [], int, int, int);
void readArray(int a[], int n);
int equalStacks(int h1_count, int* h1, int h2_count, int* h2, int h3_count, int* h3);
int main(){
int h1_count, h2_count, h3_count;
scanf("%d %d %d", &h1_count, &h2_count, &h3_count);
int h1[h1_count], h2[h2_count], h3[h3_count];
readArray(h1, h1_count);
readArray(h2, h2_count);
readArray(h3, h3_count);
int res = equalStacks(h1_count, h1, h2_count, h2, h3_count, h3);
printf("%d",res);
return 0;
}
void readArray(int a[],int n){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
}
void reverse(int h[],int n){
int i=0,j=n-1;
while(i<j){
int t=h[i];
h[i]=h[j];
h[j]=t;
i++;
j--;
}
}
int min(int a,int b,int c){
if(a < b){
if(a < c)
return a;
else
return c;
}
else
if(b < c)
return b;
else
return c;
}
void sumArray(int h[],int s[],int n){
int sum = 0;
for(int i = 0; i < n; i++){
sum += h[i];
s[i] = sum;
}
}
void copy(int a[],int b[],int n){
for(int i = 0; i < n; i++)
a[i] = b[i];
}
int search(int a[],int i,int j,int x){
int c;
if(i <= j){
c = (i + j) / 2;
if(a[c] == x)
return 1;
else if(a[c] > x)
search(a, i, c-1, x);
else
search(a, c+1, j, x);
}
return 0;
}
int equalStacks(int h1_count, int* h1, int h2_count, int* h2, int h3_count, int* h3) {
reverse(h1, h1_count);
reverse(h2, h2_count);
reverse(h3, h3_count);
int sum1[h1_count], sum2[h2_count], sum3[h3_count], flag = 1, n;
sumArray(h1, sum1, h1_count);
sumArray(h2, sum2, h2_count);
sumArray(h3, sum3, h3_count);
reverse(sum1, h1_count);
reverse(sum2, h2_count);
reverse(sum3, h3_count);
if(min(h1_count,h2_count,h3_count) == h1_count){
// int arr[h1_count];
flag = 1;
n = h1_count;
// copy(arr,h1,h1_count);
}
else if(min(h1_count,h2_count,h3_count) == h2_count){
// int arr[h2_count];
flag = 2;
n = h2_count;
// copy(arr,h2,h2_count);
}
else {
// int arr[h3_count];
flag = 3;
n = h3_count;
// copy(arr,h3,h3_count);
}
for(int i = 0; i < n; i++){
switch (flag) {
case 1:
if(search(sum2, 0, h2_count, sum1[i])){
if(search(sum3, 0, h3_count, sum1[i]))
return sum1[i];
}
break;
case 2:
if(search(sum1,0,h1_count,sum2[i])){
if(search(sum3,0,h3_count,sum2[i]))
return sum2[i];
}
break;
default:
if(search(sum2,0,h2_count,sum3[i])){
if(search(sum1,0,h1_count,sum3[i]))
return sum3[i];
}
break;
}
}
return 0;
}