include <math.h>
void findA(int *a, int temp, int index, int average, int n){
int i;
if(temp == (-2)){
for(i = index+1; i< n ;){
if(a[i] <= average){
i++;
continue;
}
else if( a[i] > average ){
a[i]-=2;
temp = 0;
return;
}
}
}
else if(temp == (2)){
for(i = index+1; i< n ;){
if(a[i] >= average){
i++;
continue;
}
else if( a[i] < average ){
a[i]+=2;
temp = 0;
return;
}
}
}}
int greedyAlg(int *a, int average, int n){
int count=0;
int temp = 0;
int i = 0;
for( ; i<n ; ){
if(a[i]>average){
a[i]-=2;
temp = 2;
}
else if(a[i]<average){
a[i]+=2;
temp = -2;
}
else{
i++;
continue;
}
// printf("\ntemp = %d a[%d] = %d", temp, i, a[i]);
findA(a, temp, i, average, n);
count++;
}
return count;
}
int main(){
int n;
int *a;
int sum=0, i=0, count=0;
int average;
scanf("%d",&n);
a = (int)malloc(n*sizeof(int));
while(i != n){
scanf("%d", a+i);
sum += a[i];
i++;
}
// printf("%d\n", sum%n);
if((sum % n) != 0){
printf("-1");
return 0;
}
average = sum/n;
for(i=0; i<n; i++){
if(abs(a[i]-average)%2 == 1){
printf("-1");
return 0;
}
}
printf("%d", greedyAlg(a, average, n));
free(a);
return 0;}

京公网安备 11010502036488号