0870 - Depou

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerința

Se consideră un depou de cale ferată precum cel din imagine:

Pe linia A se află n vagoane, numerotate cu valori distincte de la 1 la n, într-o ordine oarecare. Vagoanele trebuie mutate pe linia C, în ordinea 1 2 .. n. Pentru aceasta se poate muta câte un vagon de pe o linie pe alta, în ordinea indicată de săgeți:

  • A -> B,
  • A -> C
  • B -> C.

Să se determine o succesiune de operații care să mute toate vagoanele de pe linia A pe linia C în ordinea dorită.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale distincte cuprinse între 1 și n, reprezentând ordinea vagoanelor de pe linia A.

Date de ieșire

Programul va afișa pe ecran numărul C de operații efectuate, apoi cele C operații. Fiecare operație va fi afișată pe câte o linie a ecranului, și va consta din două caractere de forma X Y, semnificând faptul că se mută un vagon de pe linia X pe linia Y. Dacă nu este posibilă mutarea vagoanelor de pe linia A pe linia C, numărul de operații afișat va fi 0.

Restricții și precizări

  • 1 ≤ n ≤ 1000

Exemplu:

Intrare

4
2 1 3 4

Ieșire

6
A B
A B
A C
A C
B C
B C

Explicație

Ordinea inițială a vagoanelor este următoarea:

După mutarea vagoanele vor fi în ordinea:

Rezolvare

def main():
    a = [0] * 1001
    d = [[0] * 3 for _ in range(2001)]
    b = [0] * 1001

    n = int(input())
    a[1:n + 1] = map(int, input().split())

    vf = 0
    vagon = 1
    op = 0
    ok = 1
    i = n

    while vagon <= n and ok == 1:
        if vagon == a[i]:
            op += 1
            vagon += 1
            i -= 1
            d[op][0] = 1
            d[op][1] = 3
        elif vf > 0 and b[vf] == vagon:
            op += 1
            vagon += 1
            vf -= 1
            d[op][0] = 2
            d[op][1] = 3
        elif i >= 1:
            op += 1
            d[op][0] = 1
            d[op][1] = 2
            vf += 1
            b[vf] = a[i]
            i -= 1
        elif vagon >= 1 and i == 0 and vf > 0:
            ok = 0

    if ok == 0:
        print(0)
    else:
        print(op)
        for i in range(1, op + 1):
            if d[i][0] == 1:
                print("A", end=" ")
            else:
                print("B", end=" ")
            if d[i][1] == 2:
                print("B")
            else:
                print("C")

if __name__ == "__main__":
    main()