CCO-17 (2017) - 6 (Shifty Grid)

View as PDF

Submit solution

Points: 25 (partial)
Time limit: 2.0s
Memory limit: 512M

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

Σας δίνεται ένα ορθογώνιο πλέγμα αριθμημένων πλακιδίων, χωρίς κενά. Αυτό το πλέγμα μπορούμε να το χειριστούμε χρησιμοποιώντας μόνο μια ακολουθία πράξεων μετατόπισης (shift). Μια μετατόπιση περιλαμβάνει είτε τη μετακίνηση μιας ολόκληρης σειράς προς τα αριστερά ή δεξιά κατά κάποιο αριθμό μονάδων ή μετακινώντας μια ολόκληρη στήλη προς τα πάνω ή προς τα κάτω κατά έναν αριθμό μονάδων. Τα πλακάκια που κινούνται έξω από τα ορθογώνια όρια τυλίγονται στην αντίθετη πλευρά του πλέγματος. Για παράδειγμα, στο πλέγμα

    0   1   2   3
    4   5   6   7
    8   9   10  11
    12  13  14  15

μία κάθετη μετατόπιση προς τα κάτω κατά ένα που εφαρμόζεται στη δεύτερη στήλη έχει το ακόλουθο αποτέλεσμα:

    0   13  2   3
    4   1   6   7
    8   5   10  11
    12  9   14  15

Παρατηρήστε ότι μια αριστερή μετατόπιση κατά K μονάδες είναι ίδια με τη δεξιά μετατόπιση κατά N - K μονάδες. Ομοίως, μια ανοδική μετατόπιση κατά K μονάδες είναι μια μετατόπιση προς τα κάτω κατά M - K μονάδες. Έτσι, χωρίς απώλεια γενικότητας, θα περιορίσoυμε τις κατευθύνσεις μετατόπισης να είναι μόνο προς τα δεξιά ή προς τα κάτω.

Σε ένα πλέγμα με N σειρές και M στήλες, υπάρχουν N \cdot M πλακίδια συνολικά. Μπορείτε να υποθέσετε ότι τα πλακάκια αριθμούνται με διακριτούς ακέραιους από το 0 έως το N \cdot M - 1.

Ίσως έχετε παρατηρήσει ότι στο πρώτο παράδειγμα που δόθηκε παραπάνω, τα πλακάκια είναι σε ένα πολύ οργανωμένο σχηματισμό. Τέτοιες διατάξεις τις ονομάζουμε λυμένες. Δηλαδή, ένα πλέγμα πλακιδίων είναι λυμένο όταν η πρώτη σειρά περιέχει τους αριθμούς από το 0 έως το M - 1 στη σειρά, η δεύτερη σειρά έχει τους αριθμούς από το M έως το 2M - 1 με τη σειρά, και ούτω καθεξής, με την τελευταία σειρά να έχει τον αριθμό (N - 1)M\( έως \)N \cdot M - 1~ με τη σειρά.

Βρείτε μια ακολουθία πράξεων μετατόπισης που επαναφέρει ένα ανακατεμένα πλέγμα σε μία λυμένη κατάσταση.

Είσοδος

Η πρώτη γραμμή θα περιέχει δύο, χωρισμένους με κενό, ακέραιους N και M (2 \le N, M \le 100). Οι επόμενες N γραμμές θα περιέχουν M, χωρισμένους με κενό, ακέραιους που αντιπροσωπεύουν το πλέγμα.

Σημειώστε ότι και το N και το M θα είναι πάντα άρτιοι αριθμοί και θα υπάρχει μία λύση που θα απαιτεί το πολύ 10^5 πράξεις μετατόπισης.

Βαθμολογία

Για 5 σπό τους 25 διαθέσιμους βαθμούς, N \cdot M \le 8.

Για επιπλέον 10 από τους 25 διαθέσιμους βαθμούς, το παζλ θα λύνεται με το πολύ 2 κινήσεις.

Έξοδος

Εκτυπώστε οποιαδήποτε ακολουθία κινήσεων που λύνουν το παζλ, με την ακόλουθη μορφή:

  • Η πρώτη γραμμή της εξόδου θα πρέπει να περιέχει έναν ακέραιο K (1 \le K \le 10^5), που αντιπροσωπεύουν τον αριθμό των κινήσεων στην ακολουθία.

  • Οι επόμενες K γραμμές θα πρέπει να είναι είτε της μορφής 1 i r (1 \le i \le N, 0 \le r < M) που αντιπροσωπεύουν μία δεξιά μετατόπιση της i-οστης σειράς κατά r είτε της μορφής 2 j d (1 \le j \le M, 0 \le d < N) που αντιπροσωπεύουν μια μετατόπιση προς τα κάτω της j-οστης στήλης κατά d.

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

input

2 4
4 2 3 0
1 5 6 7

output

2
2 1 1
1 1 1
Επεξήγηση του πρώτου παραδείγματος

Μετατοπίζουμε την πρώτη στήλη προς τα κάτω κατά ένα για να αποκτήσουμε

    1   2   3   0
    4   5   6   7

έπειτα μετατοπίζουμε την πρώτη σειρά προς τα δεξιά κατά ένα για να φτάσουμε την κατάσταση

    0   1   2   3
    4   5   6   7

η οποία είναι λυμένη.


input

4 2
2 3
5 0
4 1
6 7

output

7
1 1 1
2 1 1
1 2 1
1 3 1
2 1 2
1 1 1
2 1 1
Επεξήγηση του δεύτερου παραδείγματος
2 3    3 2    6 2    6 2    6 2    1 2    2 1    0 1
5 0 -> 5 0 -> 3 0 -> 0 3 -> 0 3 -> 4 3 -> 4 3 -> 2 3
4 1    4 1    5 1    5 1    1 5    6 5    6 5    4 5
6 7    6 7    4 7    4 7    4 7    0 7    0 7    6 7

Comments

There are no comments at the moment.