COI-09 (2009) - 1 (Izbori)

View as PDF

Submit solution

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

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

Είναι ώρα εκλογών. V ψηφοφόροι παρευρίσκονται στις εκλογές, ο καθένας ψηφίζει για ένα από τα N πολιτικά κόμματα. M αξιωματούχοι θα εκλεγούν στο κοινοβούλιο.
Η μετατροπή από ψήφους σε βουλευτικές έδρες γίνεται με τη μέθοδο D'Hondt με όριο 5%. Πιο συγκεκριμένα, ας υποθέσουμε ότι τα κόμματα έχουν τον αριθμό 1 έως N και ότι λαμβάνουν V_1,\,V_2,\,\ldots,\,V_N ψήφους.
Οι έδρες της Βουλής κατανέμονται ως εξής:

  1. Όλα τα κόμματα που λαμβάνουν αυστηρά λιγότερο από 5% των ψήφων V διαγράφονται από τη λίστα των κομμάτων.
  2. Η βουλή είναι αρχικά άδεια, δηλαδή κάθε κόμμα έχει μηδενικές έδρες.
  3. Για κάθε κόμμα P, υπολογίζεται το πηλίκο Q_P = V_P / (S_P + 1), όπου V_P είναι ο συνολικός αριθμός ψήφων που έλαβε το κόμμα P και S_P είναι ο αριθμός των εδρών που έχουν ήδη κατανεμηθεί στο κόμμα P.
  4. Στο κόμμα με το μεγαλύτερο πηλίκο Q_P κατανέμεται μία έδρα. Εάν πολλά κόμματα έχουν το ίδιο μέγιστο πηλίκο, το κόμμα με τον μικρότερο αριθμό κερδίζει την έδρα.
  5. Επαναλάβετε τα βήματα 3 και 4 μέχρι να γεμίσει το κοινοβούλιο.

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

Είσοδος

Η πρώτη γραμμή περιέχει τους ακέραιους αριθμούς V, N και M (1 \le V \le 10\,000\,000,\,1 \le N \le 100,\,1 \le M \le 200), αριθμούς ψήφων, κομμάτων και εδρών στο κοινοβούλιο.
Η δεύτερη γραμμή περιέχει N ακέραιους αριθμούς – πόσες ψήφους (από αυτές που έχουν καταμετρηθεί) κάθε κόμμα πήρε. Το άθροισμα αυτών των αριθμών θα είναι το πολύ V.

Έξοδος

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

Βαθμολογία

Για κάθε αρχείου ελέγχου, τα δύο υποπροβλήματα (δύο γραμμές εξόδου) βαθμολογούνται ανεξάρτητα.
Η σωστή επίλυση του πρώτου υποπροβλήματος αξίζει το 20% των πόντων.
Η σωστή επίλυση του δεύτερου υποπροβλήματος αξίζει το 80% των πόντων. Είναι απαραίτητο να εκτυπώνονται ακριβώς N ακέραιοι αριθμοί στην πρώτη γραμμή (ακόμα και αν είναι τελείως λάθος) για να βαθμολογηθεί το δεύτερο υποπρόβλημα.

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

input

20 4 5
4 3 6 1

output

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

14 ψήφοι έχουν καταμετρηθεί και 6 δεν έχουν ακόμη καταμετρηθεί. Για να δείξουμε ένα δυνατό αποτέλεσμα, ας υποθέσουμε ότι το πρώτο κόμμα λαμβάνει 2 από αυτές τις 6 ψήφους, το δεύτερο καμία, το τρίτο 1 ψήφο και το τέταρτο 3 ψήφους. Τα σύνολα των κομμάτων είναι 6, 3, 7 και 4 ψήφοι. Όλα τα κόμματα ξεπέρασαν το όριο του 5%. Οι θέσεις κατανέμονται ως εξής:

  1. Τα πηλίκα είναι αρχικά 6/1, 3/1, 7/1 και 4/1,το μεγαλύτερο είναι 7/1, οπότε το κόμμα 3 κερδίζει μια έδρα.
  2. Τα πηλίκα είναι 6/1, 3/1, 7/2 και 4/1, το μεγαλύτερο είναι 6/1, οπότε το κόμμα 1 κερδίζει μια έδρα.
  3. Τα πηλίκα είναι 6/2, 3/1, 7/2 και 4/1, το μεγαλύτερο είναι 4/1, οπότε το κόμμα 4 κερδίζει μια έδρα.
  4. Τα πηλίκα είναι 6/2, 3/1, 7/2 και 4/2, το μεγαλύτερο είναι 7/2, οπότε το κόμμα 3 κερδίζει μια έδρα.
  5. Τα πηλίκα είναι 6/2, 3/1, 7/3 και 4/2. Τα κόμματα 1 και 2 ισοβαθμούν με πηλίκα 6/2 και 3/1, αλλά το κόμμα 1 έχει μικρότερο αριθμό και έτσι κερδίζει την τελευταία έδρα.

Σε αυτό το αποτέλεσμα, ο αριθμός των εδρών που κέρδισαν τα κόμματα είναι 2, 0, 2 και 1. Εφόσον είναι δυνατό για το δεύτερο μέρος που δεν θα κερδίσει καμία έδρα, ο δεύτερος αριθμός στη δεύτερη γραμμή εξόδου είναι μηδέν.


input

100 3 5
30 20 10

output

4 3 3
1 1 0

Comments

There are no comments at the moment.