COCI-06 (2006) - Γύρος #6 - 4 (Kamen)

View as PDF

Submit solution

Points: 30 (partial)
Time limit: 1.0s
Memory limit: 32M

Author:
Problem type
Allowed languages
C, C++, Java, Pascal, Python
Kamen

Εδώ και σχεδόν δύο εβδομάδες, ο Domeniko είναι ξαπλωμένος στο κρεβάτι του επειδή ο φίλος του Nedjeljko κατά λάθος πέταξε μια μεγάλη πέτρα στο αριστερό του πόδι. Καθώς ο Domeniko έχει ήδη λύσει τα προβλήμαυα από όλους τους εθνικούς κροατικούς διαγωνισμούς από το 1998, πρέπει να βρει έναν νέο τρόπο να περάσει τον χρόνο του.
Το νέο παιχνίδι του Domeniko παίζεται σε ταμπλό \(R\timesC\).Αρχικά κάθε τετράγωνο είναι είτε άδειο είτε φραγμένο από ένα τείχος. Ο Domeniko ρίχνει έναν βράχο στον πίνακα βάζοντάς τον στην επάνω σειρά μιας στήλης και μετά αφήνοντας τη βαρύτητα να κάνει τα υπόλοιπα.
Η βαρύτητα λειτουργεί ως εξής:

  • Εάν το τετράγωνο κάτω από το βράχο είναι τοίχος ή εάν ο βράχος βρίσκεται στην κάτω σειρά μιας στήλης, τότε το ο βράχος παραμένει εκεί.

  • Εάν το τετράγωνο κάτω από το βράχο είναι άδειο, τότε ο βράχος μετακινείται σε αυτό το τετράγωνο.

  • Εάν το τετράγωνο κάτω από το βράχο περιέχει άλλο βράχο, τότε ο βράχος που πέφτει μπορεί να γλιστρήσει προς τα πλάγια:

    • Εάν τα τετράγωνα αριστερά και κάτω αριστερά του βράχου είναι άδεια, τότε ο βράχος γλιστράει κατά ένα τετράγωνο αριστερά.

    • Εάν ο βράχος δεν γλιστρήσει αριστερά και τα τετράγωνα δεξιά και κάτω δεξιά είναι άδεια, τότε ο βράχος γλιστράει ένα τετράγωνο δεξιά.

    • Διαφορετικά, ο βράχος παραμένει εκεί και δεν μετακινείται ποτέ ξανά.

Ο Domeniko δεν θα πετάξει ποτέ άλλο βράχο ενώ ο προηγούμενος βράχος δεν έχει κατασταλάξει.
Γράψτε ένα πρόγραμμα που να σχεδιάζει τον πίνακα αφού ο Domeniko πετάξει όλα του τα βράχια στον πίνακα, αν ξέρουμε τις στήλες στις οποίες ο Δομένικο πέταξε τα βράχια του, με τη σειρά.
Σημείωση: Ο Domeniko δεν θα πετάξει ποτέ έναν βράχο σε στήλη στην οποία η επάνω σειρά δεν είναι άδεια.

Είσοδος

Η πρώτη γραμμή περιέχει ακέραιους αριθμούς R και \(C (1 \le R \le 30\,000,\;1 \le C \le 30), το μέγεθος του πίνακα. <br> Κάθε μία από τις ακόλουθες \)R\( γραμμές περιέχει \)C\( χαρακτήρες, την αρχική διάταξη του πίνακα. Ένα '\).\(' αντιπροσωπεύει ένα κενό πεδίο, ενώ το κεφαλαίο γράμμα '\)Χ\(' είναι ένα τετράγωνο που μπλοκάρεται από τοίχο. <br> Η επόμενη γραμμή περιέχει έναν ακέραιο αριθμό \)N (1 \le N \le 100 000)\(, τον αριθμό των βράχων που πετάει ο Domeniko. <br> Κάθε μία από τις ακόλουθες \)N\( γραμμές περιέχει έναν ακέραιο μεταξύ \)1\( και \)C\(, τη στήλη στην οποία βρίσκεται ο Domeniko πετάει ένα βράχο (η πιο αριστερή στήλη είναι η στήλη \)1\(). <br> **Σημείωση**: Στο \)60\(% των αρχείων δοκιμής, το \)R\( δεν θα είναι μεγαλύτερο από \)30~.

Έξοδος

Εκτυπώστε R γραμμές, καθεμία από τις οποίες περιέχει C χαρακτήρες, την τελική διάταξη του πίνακα. Οι βράχοι θα πρέπει να παρουσιαστούν με κεφαλαίο γράμμα '\(Ο\)'.

Παραδείγματα

input

5 4
....
....
X...
....
....
4
1
1
1
1

output

....
O...
X...
....
OOO.
Επεξήγηση του 1ου παραδείγματος

Όλοι οι βράχοι πετιούνται στην πρώτη στήλη. Ο πρώτος βράχος σταματά στον τοίχο. Ο δεύτερος βράχος πέφτει στον πρώτο, γλιστράει δεξιά και σταματά στο κάτω μέρος της δεύτερης στήλης. Ο τρίτος βράχος πέφτει στον πρώτο μετά στον δεύτερο βράχο, γλιστράει αριστερά και στηρίζεται στο κάτω μέρος της πρώτης στήλης. Ο τέταρτος βράχος πέφτει στο πρώτο, μετά στο δεύτερο και μετά γλιστράει δεξιά.


input

7 6
......
......
...XX.
......
......
.XX...
......
6
1
4
4
6
4
4

output

......
...O..
...XX.
......
.OO...
.XX...
O..O.O

Comments

There are no comments at the moment.