PTA: las personas en grupos (25 puntos) (versión en lenguaje C)

Las redes sociales, damos todo el mundo define una "actividad", según este indicador esperan ahora la multitud divide en dos categorías, a saber, orientada a la exportación (de salida, es decir, alta activo) e interior (introvertido, es decir, una baja actividad a). Requiere dos poblaciones de escala lo más cerca posible, y su actividad total se abrió la brecha tanto como sea posible.

Formato de entrada:
dada una entrada positiva de la primera línea número entero N (≦ n ≦ 10
5.
). Entonces da línea de N enteros positivos, respectivamente, de la actividad de cada persona, separadas por un espacio entre ellos. Estos números y su garantía de titularidad y no excederán de 2
31
.

Los formatos de salida:
los siguientes formatos de salida:

# Saliente: N1
introvertido #: N2
Dif = N3

Donde N1 es el número de personas orientadas; es el número de N2 persona introvertido; N3 es el valor absoluto de la diferencia entre la actividad total de dos grupos de personas.

Ejemplo de entrada 1:
10
2,381,099,462,333,461,666 555

Salida de muestra 1:.
El saliente # :. 5
introvertido # :. 5
Dif = 3611

Muestra de entrada 2:
13 es
110 79 2.186.937.211.002.913.526 5188 85 13 es

Muestra Producto 2:
el saliente # :. 7
introvertido # :. 6
Dif = 9359

#include <stdio.h>
#include <stdlib.h>

int comfunc(const void *elem1, const void *elem2);
void sort_character(int *p, int n);

int main()
{
	int n, i;
	int a[100001];
	
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &a[i]);
	qsort(a, n, sizeof(int), comfunc);
	sort_character(a, n);	
	
	return 0;
}

int comfunc(const void *elem1, const void *elem2)
{
	int *p1 = (int*)elem1;
	int *p2 = (int*)elem2;
	
	return *p1 - *p2;	
}
void sort_character(int *p, int n)
{
	int i, j, n1, n2, sum1, sum2, dif, dif1, dif2;
	
	sum1 = sum2 = 0; dif = dif1 = dif2 = 0;
	if (n % 2 == 0)
	{
		n1 = n2 = n / 2;
		for (i = 0; i < n1; i++)
			sum1 += p[i];
		for (i = n1; i < n; i++)
			sum2 += p[i]; 
		dif = abs(sum2 - sum1);
	}
	else
	{
		n1 = n2 = n / 2;
//		 dif1 = abs(p[n1] - p[n1 - 1]);          //总活跃度差值!!! 不是两个之间之差。 
//		 dif2 = abs(p[n2] - p[n2 + 1]); 
        for (i = 0; i < n1; i++)
        	sum1 += p[i];
        for (i = n / 2 + 1; i < n; i++)
        	sum2 += p[i];
        dif1 = abs(sum1 + p[n1] - sum2);
        dif2 = abs(sum2 + p[n2] - sum1);
        dif = (dif1 > dif2) ? dif1 : dif2;
		 if (dif1 > dif2)
		 	n1++;
		 else
		 	n2++;
	}
	printf("Outgoing #: %d\n", n2);
	printf("Introverted #: %d\n", n1);
	printf("Diff = %d\n", dif);
	
}
Publicado 24 artículos originales · ganado elogios 0 · Vistas 147

Supongo que te gusta

Origin blog.csdn.net/qq_45624989/article/details/105126751
Recomendado
Clasificación