elephants - IOI 2011

Transcription

elephants - IOI 2011
International Olympiad in Informatics 2011
22–29 juli 2011, Pattaya City, Thailand
Wedstrijdopdracht – Dag 2
ELEPHANTS
Dutch (BEL only) 1.2
Dansende olifanten
“Dansende olifanten” is een spectaculaire show in Pattaya waarin N olifanten op een rechte lijn (het
podium) dansen.
Na jaren van training zijn deze olifanten in staat veel waanzinnige dansjes uit te voeren. De show
bestaat uit een serie van acts. In elke act doet precies één olifant een dansje waarbij hij mogelijk op
een andere positie uitkomt.
De producenten van de show willen een fotoalbum maken met daarin foto’s van de hele show. Na
elke act willen ze foto’s maken van de olifanten zoals ze door de toeschouwers te zien zijn.
Op elk moment van de show kunnen verschillende olifanten op eenzelfde positie staan. In dat geval
staan ze gewoon achter elkaar op dezelfde positie.
Een enkele camera kan alleen een foto maken van een groep olifanten als en slechts als al hun
posities liggen op een lijnstuk van lengte L (inclusief de beide eindpunten). Omdat de olifanten zich
verspreiden langsheen het podium kunnen er verschillende camera’s nodig zijn om tegelijkertijd
foto’s te maken van alle olifanten.
Voorbeeld: stel dat L=10 en dat de olifanten op het podium staan op posities 10, 15, 17 en 20. Zoals
je hieronder kunt zien is dan één enkele camera voldoende. (Olifanten worden als driehoek
weergegeven, de camera’s als trapezium).
In de volgende act danst de olifant die op positie 15 staat naar positie 32. Na deze act hebben we
minstens twee camera’s nodig om de foto’s te maken.
In de volgende act danst de olifant die op positie 10 staat naar positie 7. Voor deze nieuwe
rangschikking van olifanten zijn drie camera’s nodig om ze allemaal op beeld te zetten.
Pagina 1 van 4
International Olympiad in Informatics 2011
22–29 juli 2011, Pattaya City, Thailand
Wedstrijdopdracht – Dag 2
ELEPHANTS
Dutch (BEL only) 1.2
In deze interactieve opgave is het de bedoeling dat je na elke act bepaalt wat het minimale aantal
camera’s is dat nodig is om de foto’s te maken. Let op dat het aantal benodigde camera’s tussen de
acts omhoog kan gaan, omlaag kan gaan, of gelijk kan blijven.
Opdracht
Schrijf de volgende procedures:
 Procedure init(N, L, X) accepteert de volgende parameters:
 N – het aantal olifanten. Deze zijn genummerd van 0 tot en met N-1.
 L – de lengte van het segment dat een enkele camera kan fotograferen. Je kunt ervan
uitgaan dat 0 ≤ L ≤ 1 000 000 000.
 X – een ééndimensionale array met daarin de startposities van de olifanten.
Voor 0 ≤ i < N geldt dat olifant i begint op positie X[i]. De startposities zijn
gesorteerd, d.w.z. 0 ≤ X[0] ≤ ... ≤ X[N-1] ≤ 1 000 000 000. Wees je ervan bewust
dat gedurende het dansen de olifanten in een andere volgorde kunnen komen te staan.
Deze procedure wordt precies één keer aangeroepen voordat de aanroepen naar de procedure
update beginnen. Deze procedure geeft geen resultaat terug.
 Procedure update(i, y) accepteert de volgende parameters:
 i – het nummer van de olifant die in de huidige act beweegt.
 y – de positie waar olifant i staat aan het einde van de huidige act. Je kunt ervan
uitgaan dat y een geheel getal is zodat 0 ≤ y ≤ 1 000 000 000.
Deze procedure wordt herhaaldelijk aangeroepen. Elke aanroep komt overeen met een act
(die volgt op alle voorafgaande acts). Elke aanroep moet als resultaat teruggeven wat het
minimale aantal benodigde camera’s is om alle olifanten te fotograferen na de betreffende
act.
Pagina 2 van 4
International Olympiad in Informatics 2011
22–29 juli 2011, Pattaya City, Thailand
Wedstrijdopdracht – Dag 2
ELEPHANTS
Dutch (BEL only) 1.2
Voorbeeld
Beschouw dit voorbeeld waarbij N=4 en L=10. De startposities van de olifanten zijn als volgt:
10
15
X=
17
20
Allereerst wordt jouw procedure init aangeroepen met deze parameters. Vervolgens wordt jouw
procedure update één keer per act aangeroepen. Hieronder staat een voorbeeld van
achtereenvolgende aanroepen en het juiste teruggegeven resultaat:
act
1
2
3
4
5
call parameters
update(2,16)
update(1,25)
update(3,35)
update(0,38)
update(2,0)
return value
1
2
2
2
3
Subtasks
Subtask 1 (10 punten)
 Er zijn precies N = 2 olifanten.
 Initieel, én na iedere act, staan er geen twee olifanten op dezelfde positie.
 De procedure update wordt maximaal 100 maal aangeroepen.
Subtask 2 (16 punten)
 1 ≤ N ≤ 100.
 Initieel, en na iedere act, staan er geen twee olifanten op dezelfde positie.
 De procedure update wordt maximaal 100 maal aangeroepen.
Subtask 3 (24 punten)
 1 ≤ N ≤ 50 000.
 Initieel, en na iedere act, staan er geen twee olifanten op dezelfde positie.
 De procedure update wordt maximaal 50 000 maal aangeroepen.
Subtask 4 (47 punten)
 1 ≤ N ≤ 70 000.
 Olifanten kunnen op dezelfde positie staan.
 De procedure update wordt maximaal 70 000 maal aangeroepen.
Pagina 3 van 4
International Olympiad in Informatics 2011
22–29 juli 2011, Pattaya City, Thailand
Wedstrijdopdracht – Dag 2
ELEPHANTS
Dutch (BEL only) 1.2
Subtask 5 (3 punten)
 1 ≤ N ≤ 150 000.
 Olifanten kunnen op dezelfde positie staan.
 De procedure update wordt maximaal 150 000 maal aangeroepen.
 Let op de informatie over het CPU gebruik verderop!
Implementatiedetails
Limieten
 CPU tijdslimiet: 9 seconden
Let op: De templates voor datastructuren in de C++ Standard Library (STL) kunnen
langzaam zijn; het kan zijn dat je subtask 5 niet kan oplossen als je deze gebruikt.
 Geheugenlimiet: 256 MB
Let op: Er is geen expliciete bovengrens voor de grootte van de stack. De grootte van het
stackgeheugen telt mee bij het bepalen van het totale geheugengebruik.
Interface (API)
 Implementatie map: elephants/
 Te implementeren door de deelnemer: elephants.c, elephants.cpp of elephants.pas
 Interface voor de deelnemer: elephants.h of elephants.pas
 Voorbeeldgrader: grader.c, grader.cpp of grader.pas
 Voorbeeldgrader invoer: grader.in.1, grader.in.2, ...
De voorbeeldgrader leest de invoer in het volgende formaat:
 Regel 1: N, L en M, waarbij M het aantal acts is in de show.
 Regels 2 tot en met N+1: de beginposities; regel k+2 bevat X[k] voor 0 ≤ k < N.
 Regels N+2 tot en met N+M+1: informatie over M acts; regel N+1+j bevat i[j], y[j]
en s[j], gescheiden door een spatie, die aangeven dat in de j-de act de olifant i[j]
beweegt naar positie y[j], en, dat na deze act er minimaal s[j] camera’s nodig zijn.
(1 ≤ j ≤ M).
 De verwachte uitvoer die hoort bij de invoer van de voorbeeldgrader: grader.expect.1,
grader.expect.2, …
Bij deze opdracht zou elk van deze bestanden precies de tekst “Correct.” moeten bevatten.
Pagina 4 van 4
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 2
ELEPHANTS
French - Français 1.2
Éléphants danseurs
Les éléphants danseurs sont un spectacle extraordinaire à Pattaya, où N éléphants dansent le long
d’une ligne appelée la scène.
Après des années d’entraînement, les éléphants de ce spectacle sont capables d’effectuer des danses
incroyables. Le spectacle consiste en une série d’étapes successives. À chaque étape, exactement un
éléphant réalise une petite danse, qu’il termine à une position qui peut être différente de sa position
de départ.
Les producteurs du spectacle souhaitent réaliser un album contenant des photos de l’intégralité du
spectacle. Après chaque étape, ils souhaitent prendre des photos de tous les éléphants tels que les
voient les spectateurs.
À tout moment pendant le spectacle, plusieurs éléphants peuvent se trouver à la même position.
Dans ce cas, ils se placent simplement les uns derrière les autres à la même position.
Un appareil photo donné peut prendre une photo d’un groupe d’éléphants si et seulement si leurs
positions sont toutes sur un segment de longueur L (y compris ses deux extrémités). Comme les
éléphants peuvent être répartis sur toute la scène, plusieurs appareils photos peuvent être nécessaires
pour prendre un ensemble de photos contenant tous les éléphants à un instant donné.
Par exemple, supposons que L=10 et que les éléphants soient aux positions 10, 15, 17 et 20 sur la
scène. Dans ce cas, un seul appareil suffit pour tous les prendre en photo, comme indiqué cidessous. (Les éléphants sont représentés par des triangles, tandis que les appareils photos sont
représentés par des trapèzes.)
Lors de l’étape suivante, l’éléphant situé à la position 15 danse vers la position 32. Après cette
étape, deux appareils photos au moins sont nécessaires pour photographier tous les éléphants.
Lors de l’étape suivante, l’éléphant se trouvant à la position 10 se déplace vers la position 7. Pour la
nouvelle répartition des éléphants, trois appareils photos sont nécessaires pour qu’ils soient tous
photographiés.
Page 1 sur 4
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 2
ELEPHANTS
French - Français 1.2
Dans ce sujet interactif, vous devez déterminer le nombre minimal d’appareils photos nécessaires
pour prendre ces photos, et ce après chacune des étapes. Notez que le nombre d’appareils photos
nécessaires peut augmenter, diminuer, ou rester le même d’une étape à la suivante.
Votre objectif
Écrivez les fonctions suivantes :
 La fonction init(N,L,X) qui prend les arguments suivants :
 N – le nombre d’éléphants. Les éléphants sont numérotés de 0 à N-1.
 L – la longueur d’un segment de la scène qui peut être photographié par un appareil
photo. Vous pouvez considérer que L est un entier tel que 0 ≤ L ≤ 1 000 000 000.
 X – un tableau d’entiers à une dimension qui représente les positions initiales des
éléphants. Pour i tel que 0 ≤ i < N, l’éléphant i commence à la position X[i]. Les
positions initiales sont données dans l’ordre. Plus précisément, vous pouvez
considérer que 0 ≤ X[0] ≤ ... ≤ X[N-1] ≤ 1 000 000 000. Notez que les éléphants
peuvent changer d’ordre au cours de la danse.
Cette fonction ne sera appelée qu’une fois, avant tous les appels à la fonction update. Elle
ne retourne aucune valeur.
 La fonction update(i,y) qui prend les arguments suivants :
 i – le numéro de l’éléphant qui se déplace lors de l’étape courante.
 y – la position où l’éléphant i va se trouver après l’étape courante. Vous pouvez
considérer que y est un entier tel que 0 ≤ y ≤ 1 000 000 000.
Cette fonction sera appelée plusieurs fois. Chaque appel correspond à une unique étape (qui
suit l’étape de l’appel précédent). Chaque appel doit retourner le nombre minimal
d’appareils photos nécessaires pour photographier tous les éléphants après l’étape
correspondante.
Page 2 sur 4
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 2
ELEPHANTS
French - Français 1.2
Exemple
Considérez le cas où N=4, L=10, et les positions initiales des éléphants sont
10
15
X=
17
20
Tout d’abord, votre fonction init va être appelée avec ces arguments. Ensuite, votre fonction update
sera appelée une fois pour chaque étape. Voici un exemple de séquence d’appels et les valeurs de
retour correctes correspondantes :
étape
1
2
3
4
5
arguments de
l’appel
update(2,16)
update(1,25)
update(3,35)
update(0,38)
update(2,0)
valeur
retournée
1
2
2
2
3
Sous-tâches
Sous-tâche 1 (10 points)
 Il y a exactement N = 2 éléphants.
 Au départ et après chaque étape, les positions de tous les éléphants seront distinctes.
 Votre fonction update sera appelée 100 fois au maximum.
Sous-tâche 2 (16 points)
 1 ≤ N ≤ 100.
 Au départ et après chaque étape, les positions de tous les éléphants seront distinctes.
 Votre fonction update sera appelée 100 fois au maximum.
Sous-tâche 3 (24 points)
 1 ≤ N ≤ 50 000.
 Au départ et après chaque étape, les positions de tous les éléphants seront distinctes.
 Votre fonction update sera appelée 50 000 fois au maximum.
Sous-tâche 4 (47 points)
 1 ≤ N ≤ 70 000.
 Les éléphants peuvent partager la même position.
 Votre fonction update sera appelée 70 000 fois au maximum.
Page 3 sur 4
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 2
ELEPHANTS
French - Français 1.2
Sous-tâche 5 (3 points)
 1 ≤ N ≤ 150 000.
 Les éléphants peuvent partager la même position.
 Votre fonction update sera appelée 150 000 fois au maximum.
 Merci de consulter la remarque sur le temps d’exécution maximal dans la section sur les
détails d’implémentation.
Détails d’implémentation
Limites
 Temps d’exécution maximal : 9 secondes
Remarque : l’utilisation de certaines structures de données de la STL (Standard Template
Library) en C++ peut avoir un coût en performances, et il est possible que vous ne puissiez
pas résoudre la sous-tâche 5 si vous les utilisez.
 Limite d’utilisation mémoire (RAM) : 256 Mo
Remarque : il n’y a pas de limite explicite pour la taille de la pile (stack). La mémoire
utilisée par la pile est comptée dans la mémoire totale utilisée.
Interface (API)
 Répertoire d’implémentation : elephants/
 Fichier où placer son programme : elephants.c ou elephants.cpp ou elephants.pas
 Interface candidat : elephants.h ou elephants.pas
 Évaluateur d’exemple : grader.c ou grader.cpp ou grader.pas
 Entrée pour l’évaluateur d’exemple: grader.in.1, grader.in.2, ...
Remarque : l’évaluateur d’exemple lit l’entrée au format suivant :
 Ligne 1: N, L, et M, où M est le nombre d’étapes du spectacle.
 Lignes 2 à N+1: les positions initiales. Plus précisément, la ligne k+2 contient X[k]
pour 0 ≤ k < N.
 Lignes N+2 à N+M+1: les informations sur les M étapes. Plus précisément, la ligne
N+1+j contient i[j], y[j] et s[j], séparés par des espaces, et indiquant que lors de la je
étape, l’éléphant i[j] se déplace vers la position y[j], et qu’après cette étape, s[j] est le
nombre minimal d’appareils photos nécessaires, pour 1 ≤ j ≤ M.
 La sortie attendue pour l’évaluateur d’exemple : grader.expect.1, grader.expect.2, …
Pour ce sujet, chacun de ces fichiers doit contenir exactement le texte “Correct.”
Page 4 sur 4

Documents pareils