1075 clasificación de lista de elementos (25 puntos)


Dada una sola cadena, el programa escribirá un clasificado elementos de la lista se disponen de modo que todos los elementos negativos en la primera fila son elemento no negativo, y [0, K] son ​​los elementos de la sección en la primera fila es mayor que K elementos. Sin embargo, el orden de los elementos dentro de cada clase no se puede cambiar. Por ejemplo: se da la lista 18 → 7 → -4 → 0 → 5 → -6 → 10 → 11 → -2, K es 10, entonces la salida debe -4 → -6 → -2 → 7 → 0 → 5 → 10 → 18 → 11.

Formato de entrada:
Cada entrada incluye una prueba. Cada caso de prueba se da la fila 1: 1 dirección del primer nodo; el número total de nodos, es decir, un número entero positivo N (≦ 10
5.
), Y un número entero positivo de K (≦ 10
3.
). Dirección del nodo 5 son números enteros no negativos, dirección NULL está representada por -1.

Entonces hay N filas, cada fila del formato:

Dirección de datos siguiente



Donde dirección es la dirección del nodo; datos se almacenan en los datos del nodo, es [-10
5.
Y 10
5.
] Es un número entero en el intervalo, el siguiente es la dirección del siguiente nodo. Título prestar para asegurar que la lista no está vacía.

Formato de salida:
para cada caso de prueba, el orden de la lista de principio a fin de salida de la lista reordenada, cada nodo de los cuales representa la misma línea, con el formato de entrada.

de entrada de la muestra:
00100. 9 10
23 333 10 27 777
00 000 99 999 0
001 001 812 309
68237 a 623333
33.218-400.000
48.652 -2 -1
99999 68237. 5
277 771 148 652
12 309 33 218. 7



Muestra de la salida:
33218-468237
68237-648652
48652-212309
12309 00000. 7
00 000 0 99 999
99 999 23333. 5
23 333 10 00 100
00 100 18 es 27.777
27.777 -1 11.

Simple como puntos de clasificación, la matriz se divide en tres, y luego la salida.

#include <iostream>
# include <pila>
# include <cola>
# include <algoritmo>
#include <vector>
using namespace std;
const int MaxV = 100.000;
struct nodo {
    agrega, da, ne;
    Node (): add (), da (), NE () {} // hay que añadir constructor por defecto
    Node (int a, int b, int c): add (a), da (b), ne (c) {}
    Nodo (int a, int b): add (a), da (b) {}
};
Nodo todos [MaxV];
vector <Node> a, b, c; // a, b, c son negativos, [0, k], y ajuste mayor que k.
int main () {
    num int, s, k
    cin >> S >> >> num k;
    for (int i = 0; i <num; i ++) {
        te anuncio, da, ne;
        cin >> anuncio >> >> da ne;
        todos [ad] = Nodo (a, desde, ne);
    }
    mientras que (S! = -1) {
        int d = all [s] .da;
        si (d <0) {// sub-clases
            a.push_back (nodo (s, d));
        }
        else if (d> = 0 && d <= k)
            b.push_back (Nodo (s, d));
        más
            c.push_back (Nodo (s, d));
        todos los s = [s] .NE;
    }
    for (int i = 0; i <a.size (); i ++) {
        Si (i = 0!) printf ( "% 05d \ n", a [i] .add); // 用 a [i] .add 代替 a [i-1] .NE;
        printf ( "% 05d% d", a [i] .add, a [i] .da);
        si (i == a.size () - 1) {
            si (B.Size ()> 0) // b elemento tiene
                printf ( "% 05d \ n", b [0] .add);
            else if (c.size ()> 0) // C tiene elementos
                printf ( "% 05d \ n", c [0] .add);
            else // ningún elemento
                cout << "-1" << endl;
        }
    }
    for (int i = 0; i <B.Size (); i ++) {
        if (! i = 0) printf ( "% 05d \ n", b [i] .add);
        printf ( "% 05d% d", b [i] .add, b [i] .da);
        si (i == B.Size () - 1) {
            si (c.size ()> 0)
                printf ( "% 05d \ n", c [0] .add);
            más
                cout << "-1" << endl;
        }
    }
    for (int i = 0; i <c.size (); i ++) {
        if (! i = 0) printf ( "% 05d \ n", c [i] .add);
        printf ( "% 05d% d", c [i] .add, c [i] .da);
        si (i == c.size () - 1) {
            cout << "-1" << endl;
        }
    }

}

 

Supongo que te gusta

Origin www.cnblogs.com/kalicener/p/12601525.html
Recomendado
Clasificación