PTA: Perro individual (25 puntos) (versión en lenguaje C)

"Perro individual" es el término chino de cariño para una sola persona. Esta pregunta puede encontrar huéspedes de la gran parte única de miles de personas con el fin de dar un cuidado especial.

Formato de entrada:
entrada de la primera fila se le da un número entero positivo N (≤ 50.000), es el número de conocida par / pareja, y luego N filas, cada fila se da un par / pareja - por conveniencia, cada uno correspondiente a un número de ID, 5 dígitos, separados por inter-ID (00.000 a 99.999) con un espacio; dado después de un número entero positivo M (≤10000), el número total de personas en la fiesta; entonces la línea M da a los huéspedes ID , separadas por un espacio. Tema asegurar que no los barcos bigamia o el pie.

Formato de salida:
En primer lugar, la línea de salida única de un primer número total de huéspedes; seguido de un segundo ID de línea se incrementa en el orden indicado en los huéspedes individuales. Con un espacio entre el ID de la partición, y la fila última puede no tener espacio extra.

de entrada de la muestra:
. 3
11.111 22.222
33.333 44.444
55.555 66.666
7.
55555 444,441,000,088,888 222,221,111,123,333

Muestra de la salida:
. 5
10 000 23 333 444,445,555,588,888

análisis

Si está abierto, respectivamente, a, b almacenar, respectivamente, dos conjuntos de un par, después de atravesar a través de dos para, toma mucho tiempo no pasa, así que aquí usamos una matriz para almacenar, a [i] = n; en un par de .
Luego se utiliza una matriz para almacenar la escena el hombre c, b gama de la marca Identificación.

#include <stdio.h>
#include <stdlib.h>
#define MAX 100000

int cmpfunc(const void *elemt1, const void *elemt2);

int main()
{
    int n1, n2, i, j, k, n;
    int a[MAX], b[MAX] , c[10001], d[10001];

    for (i = 0; i < MAX; i++)
    {
        a[i] = -1;
        b[i] = -1;
    }
    for (i = 0; i < 10001; i++)
        c[i] = -1;
    scanf("%d", &n1);
    for (i = 0; i < n1; i++)      //牺牲空间换时间。
    {
        int tempa, tempb;
        scanf("%d %d", &tempa, &tempb);
        a[tempa] = tempb;
        a[tempb] = tempa;
    }
    scanf("%d", &n2);
    for (i = 0; i < n2; i++)
    {
        scanf("%d", &c[i]);
        b[c[i]] = 1;
    }
    n = k = 0;             //n是单身狗人数。
    for (i = 0; i < n2; i++)
    {
        int temp;
        temp = a[c[i]];
        if (b[temp] != -1)
            continue;
        else
        {
		d[k++] = c[i];
		n++;
		}
    }
    qsort(d, n, sizeof(int), cmpfunc);
    printf("%d\n", n);
    if (n != 0)                     //r如果没有if判断,当 n = 0时,依然会输出 00000
        printf("%05d", d[0]);       //如果直接%d  则会0 而不是00000,格式错误。
    for (i = 1; i < n; i++)
        printf(" %05d", d[i]);

    return 0;
}
int cmpfunc(const void *elemt1, const void *elemt2)
{
    int *p1 = (int*)elemt1;
    int *p2 = (int*)elemt2;

    return *p1 - *p2;
}
Publicado 24 artículos originales · ganado elogios 0 · Vistas 146

Supongo que te gusta

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