CCC-11 (2011) - J4 (Boring Business)

View as PDF

Submit solution

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

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

Η διάτρηση διεύρυνσης είναι ένα είδος γεώτρησης, συγκεκριμένα, η διάνοιξη μιας σήραγγας, ενός φρέατος ή μιας τρύπας στη γη. Μετά από ορισμένα πρόσφατα γεγονότα, όπως η πετρελαιοκηλίδα στον κόλπο του Μεξικού και η διάσωση των χιλιανών ανθρακωρύχων, ο κόσμος συνειδητοποίησε την πολυπλοκότητα της τρέχουσας τεχνολογίας διατρήσεων. Χρησιμοποιώντας την τεχνική που είναι γνωστή ως geosteering, οι χειριστές των γεωτρύπανων μπορούν να τρυπήσουν κάθετα, οριζόντια ή ακόμη και υπό κεκλιμένη γωνία.

Πριν από μια γεώτρηση προετοιμάζεται ένα σχέδιό της, το οποίο ορίζει μια ακολουθία γραμμών, που αντιπροσωπεύει το γεωμετρικό σχήμα της μελλοντικής γεώτρησης. Ωστόσο, καθώς νέες πληροφορίες καθίστανται διαθέσιμες κατά τη διάρκεια της γεώτρησης, το μοντέλο μπορεί να ενημερωθεί και το σχέδιο να τροποποιηθεί.

Στόχος σας είναι να γράψετε ένα πρόγραμμα που να επαληθεύει την εγκυρότητα ενός σχεδίου γεώτρησης- θα ελέγχει ότι η γεώτρηση δεν θα τέμνει τον εαυτό της. Για την αναπαράσταση μιας κατακόρυφης διατομής της γεώτρησης χρησιμοποιείται ένα δισδιάστατο σχέδιο το οποίο περιλαμβάνει και γεώτρηση που έχει ήδη πραγματοποιηθεί και ξεκινά από το σημείο (0,\;-1) και κινείται προς το (-1,\;-5). Θα κωδικοποιήσετε στο πρόγραμμά σας το τρέχον σχέδιο γεώτρησης που φαίνεται στο σχήμα παρακάτω:

Είσοδος

Η είσοδος αποτελείται από μια ακολουθία ζευγών εντολών διάτρησης. Ένα ζεύγος εντολών διάτρησης αρχίζει με έναν από τους τέσσερις δείκτες κατεύθυνσης (d για κάτω, u για πάνω, l για αριστερά και r για δεξιά) ακολουθούμενο από ένα θετικό μήκος. Υπάρχει μια πρόσθετη εντολή διάτρησης, με δείκτη q (quit) ακολουθούμενο από οποιονδήποτε ακέραιο αριθμό, η οποία υποδεικνύει ότι το πρόγραμμα πρέπει να σταματήσει την εκτέλεση. Μπορείτε να υποθέσετε ότι η είσοδος είναι τέτοια ώστε το σημείο διάτρησης δεν θα γίνει:

  • να ανυψωθεί πάνω από το έδαφος, ούτε
  • να βρίσκεται περισσότερες από 200 μονάδες κάτω από το έδαφος, ούτε
  • να είναι περισσότερες από 200 μονάδες αριστερά από το αρχικό σημείο εκκίνησης, ούτε
  • να είναι περισσότερες από 200 μονάδες δεξιά του αρχικού σημείου εκκίνησης
Έξοδος

Το πρόγραμμα θα πρέπει να συνεχίσει να παρακολουθεί τη γεώτρηση με δεδομένο οτι η γεώτρηση που φαίνεται στο σχήμα έχει ήδη γίνει. Όπως βλέπουμε (-1,\;-5) είναι η θέση εκκίνησης για το πρόγραμμά σας. Μετά από κάθε εντολή, το πρόγραμμα θα πρέπει να εξάγει μία γραμμή με τις συντεταγμένες της νέας θέσης του τρυπανιού, και ένα από τα δύο σχόλια: safe αν δεν υπήρξε διασταύρωση με προηγούμενη θέση ή DANGER, εάν υπήρξε διασταύρωση με προηγούμενη θέση γεώτρησης. Μετά την ανίχνευση και την αναφορά μιας αυτοδιασταύρωσης, το πρόγραμμά σας πρέπει να σταματήσει.

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

input

l 2
d 2
r 1
q 0

output

-3 -5 safe
-3 -7 safe
-2 -7 safe

input

r 2
d 10
r 4

output

1 -5 safe
1 -15 DANGER

Comments

There are no comments at the moment.