CCC-02 (2002) - S5 (Ball)

View as PDF

Submit solution

Points: 50 (partial)
Time limit: 1.0s
Memory limit: 1M

Author:
Problem type
Allowed languages
C, C++, Java, Pascal, Python
Follow the Bouncing Ball

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

Οι μπάλες αναπηδούν από τους τοίχους σύμφωνα με τους νόμους της φυσικής. Η γωνία της μπάλας καθώς πλησιάζει τον τοίχο (γωνία πρόσπτωσης) θα ισούται με τη γωνία της μπάλας καθώς αναπηδά για να απομακρυνθεί (γωνία ανάκλασης).

ccc02s5-figure-1.svg

Γράψτε ένα πρόγραμμα που θα καθορίζει πόσες αναπηδήσεις θα χρειαστούν προτού η μπάλα που αναπηδά πέσει σε μια γωνία. Οι διαστάσεις της οθόνης είναι στο διάστημα [100, 1000] μονάδων. Θεωρήστε τη μπάλα ως ένα σημείο στην οθόνη. Τα γωνιακά τμήματα (corner pockets) είναι 5 μονάδες κατά μήκος κάθε τοίχου και αν μια μπάλα χτυπήσει στο τμήμα αυτό του τοίχου, στην άκρη μιας τρύπας, θα συνεχίσει να αναπηδά.

Ένα παράδειγμα οθόνης φαίνεται παρακάτω:

ccc02s5-figure-2.svg

Η είσοδος θα αποτελείται από τέσσερις ακέραιους, ο καθένας σε ξεχωριστή γραμμή:

  • n – το πλάτος της οθόνης, 100 \le n \le 1000
  • m – το ύψος της οθόνης, 100 \le m \le 1000
  • p – η αρχική θέση της μπάλας στο κάτω μέρος της οθόνης, 5 \le p \le n-5
  • q – η θέση της μπάλας όταν αναπηδά από τον δεξιό τοίχο, 5 \le q \le m-5
  • Η έξοδος αποτελείται από έναν ακέραιο που υποδεικνύει τον αριθμό των αναπηδήσεων που κάνει η μπάλα πριν εξαφανιστεί σε μια γωνία. Μετρήστε το χτύπημα από τον δεξιό τοίχο ως την πρώτη αναπήδηση. Είναι πιθανό η μπάλα να μην αναπηδήσει ποτέ σε γωνία (υποθέτοντας επιφάνεια χωρίς τριβή), σε αυτήν την περίπτωση, η έξοδος θα πρέπει να είναι 0. Σημειώστε ότι όταν η μπάλα χτυπήσει σε pocket δεν υπολογίζεται ως αναπήδηση. Δεν χρειάζεται να προγραμματίσετε το πραγματικό animation.
Παράδειγμα

input

300
200
200
100

output

2

Comments

There are no comments at the moment.