www.agora.ro
Incercați-vă puterile!

PROBLEME propuse pentru REZOLVARE

Iată, am ajuns și la IOI! În Portugalia, la Setubal, băieții din echipa României, împreună cu alți 240 de concurenți s-au întrecut în rezolvarea cât mai performantă a problemelor de mai jos. Încercați și voi să le rezolvați, nu sunt chiar atât de grele...

P099801: Camelot

Cu secole în urmă Regele Arthur și Cavalerii Mesei Rotunde obișnuiau să se întâlnească de Anul Nou. În memoria lor vom considera următorul joc, pentru un singur jucător, în care pe o tablă de șah avem un Rege și câțiva Cavaleri, așezați arbitrar pe pătrățele diferite ale tablei.

Tabla are 8x8 pătrățele:

Figura 1. Tabla

Regele poate fi mutat în orice pătrățel vecin din poziția marcată cu - în oricare din cele opt poziții marcate cu O, conform figurii 2, astfel încât să rămână pe tablă.

Figura 2. Mutările posibile ale Regelui

Un Cavaler poate fi mutat din poziția marcată cu - în oricare din cele opt poziții marcate cu O, conform figurii 3 astfel încât să rămână pe tablă.

Figura 3. Mutările posibile ale unui Cavaler

Pe parcursul jocului, un pătrățel poate fi ocupat de mai multe piese, în același timp. Pătrățelele sunt suficient de mari încât permit așezarea pe ele a oricâte piese.

Scopul jucătorului este de a muta toate piesele pe un același pătrățel cu numărul minim posibil de mutări, conform regulilor descrise. Dacă Regele și unul sau mai mulți Cavaleri se află pe același pătrățel, jucătorul are voie să mute Regele împreună cu unul dintre Cavaleri. Ei se vor muta împreună, de aici încolo, ca și cum ar fi un singur Cavaler, până la pătrățelul final. Mutarea unui Cavaler împreună cu Regele se contorizează ca fiind una singură.

Cerințe

Scrieți un program care determină numărul minim de mutări necesare pentru a muta toate piesele pe un singur pătrățel.

Date de intrare

Fișierul de intrare CAMELOT.IN conține configurația inițială a tablei sub forma unui șir de caractere. Stringul conține o secvență de cel mult 64 elemente distincte, primul element (format din două caractere) precizând poziția Regelui, restul fiind descrieri ale pozițiilor Cavalerilor. Fiecare element corespunzător unei poziții este format dintr-o literă urmată de o cifră. Litera precizează coloana, iar cifra indică linia.

Exemplu:

D4A3A8H1H8

În acest exemplu Regele se află pe poziția D4 și avem patru cavaleri pe pozițiile A3, A8, H1 și H8.

Date de ieșire

Fișierul de ieșire CAMELOT.OUT va conține pe o singură linie numărul minim de mutări prin care jucătorul poate să adune toate piesele pe un același pătrățel.

Corespunzător exemplului dat, conținutul fișierului de ieșire trebuie să fie:

10

Restricții

0 Ł numărul cavalerilor Ł 63

P099802: Contact

Dr. Astro Insky lucrează într-un centru de radiotelescopie. Recent, ea a înregistrat câteva semnale pulsatoare ciudate sosite din centrul galaxiei. Se pune problema dacă aceste semnale provin sau nu de la o formă de viață inteligentă sau reprezintă doar o pulsație obișnuită a stelelor.

Cerințe

Ajutați-o pe Dr. Insky să stabilească adevărul privind aceste semnale și găsiți o modalitate de a analiza mostrele de biți din fișierele înregistrate de ea. Dr. Insky își propune să depisteze mostre având lungimile cuprinse între A și B inclusiv, care se pot repeta în fișierul înregistrat de ea. Se vor căuta cele mai mari N frecvențe (număr de apariții) distincte. Mostrele pot fi și suprapuse. Frecvențele sunt numere mai mari decât zero.

Date de intrare

Conținutul și formatul fișierului CONTACT.IN este următorul:

Prima linie - conține un număr întreg A, reprezentând lungimea minimă a mostrei;

A doua linie - conține un număr întreg B, reprezentând lungimea maximă a mostrei;

A treia linie - conține un număr întreg N, reprezentând numărul de frecvențe distincte care se vor căuta;

A patra linie - conține o secvență formată din caractere 0 și 1, terminată prin caracterul 2.

Exemplu:

2

4

10

010100100100010001111011000010100110011110000100100111100100000002

În acest exemplu se cer cel mult primele 10 cele mai mari frecvențe de mostre, având lungimile cuprinse între 2 și 4 inclusiv, existente în secvența de biți.

Cea de a patra linie din fișierul de intrare este afișată pe mai multe linii pentru a putea fi listată în enunț. În acest exemplu, mostra 100 apare de 12 ori, iar mostra 1000 apare de 5 ori. Frecvența maximă de apariție o are mostra 00.

Date de ieșire

Fișierul de ieșire CONTACT.OUT va avea cel mult N linii, fiecare conținând cele mai mari N frecvențe și mostrele corespunzătoare. Afișarea se va face în ordinea descrescătoare a frecvențelor. Fiecare linie va avea următorul format:

frecvență mostră mostră ? mostră

unde frecvență reprezintă numărul de apariții a mostrelor care sunt scrise pe linia respectivă. Mostrele de pe o aceeași linie vor fi scrise în ordinea descrescătoare a lungimii, iar în cazul unor lungimi egale, în ordine numerică descrescătoare. În cazul în care există mai puțin decât N frecvențe diferite, fișierul de ieșire va conține mai puțin de N linii.

Exemplu:

Pentru fișierul de intrare din exemplu, fișierul de ieșire va conține:

23 00

15 10 01

12 100

11 001 000 11

10 010

8 0100

7 1001 0010

6 0000 111

5 1000 110 011

4 1100 0011 0001

Restricții

Fișierul de intrare poate avea cel mult 2 megabytes.

Valorile parametrilor A, B și N sunt:

0 < N Ł 20

0 < A Ł B Ł 12

P099803: Orgă de lumini

La masa festivă a IOI'98 avem N becuri numerotate de la 1 la N. Becurile sunt conectate la patru butoane:

butonul 1 - prin acționarea acestui buton, toate becurile își schimbă starea: cele aprinse (ON) se vor stinge (OFF), cele stinse se vor aprinde;

butonul 2 - schimbă starea tuturor becurilor numerotate cu numere impare;

butonul 3 - schimbă starea tuturor becurilor numerotate cu numere pare;

butonul 4 - schimbă starea becurilor numerotate cu numere de forma 3K+1 (Kł0), adică: 1, 4, 7, ...;

Contorul C înregistrează numărul total de acționări ale butoanelor. La începutul petrecerii toate becurile sunt aprinse (ON) și contorul C este 0.

Cerințe

Aveți la dispoziție o valoare dată pentru contorul C și informații despre starea finală a câtorva becuri. Scrieți un program care determină toate configurațiile posibile distincte a celor N becuri ce se pot obține din datele inițiale.

Date de intrare

Fișierul PARTY.IN are patru linii și conține numărul de becuri N, numărul total de acționări C ale butoanelor și starea unor becuri în configurația finală.

Prima linie conține numărul N, linia a doua valoarea finală a contorului C, cea de a treia linie conține lista numerelor de ordine ale becurilor care trebuie să fie aprinse în configurația finală (separate printr-un singur spațiu). Linia se termină cu numărul întreg -1. Cea de a patra linie conține lista numerelor de ordine ale becurilor care trebuie să fie stinse în configurația finală. Această linie are același format ca linia a treia.

Exemplu:

10

1

-1

7 -1

În acest exemplu avem 10 becuri și doar o singură acționare de buton. Becul numerotat cu 7 trebuie să fie stins în configurația finală.

Date de ieșire

Fișierul de ieșire PARTY.OUT trebuie să conțină toate configurațiile finale posibile ale stărilor becurilor. Fiecare linie conține o singură configurație. O configurație se va scrie în fișier o singură dată. Ordinea de scriere a configurațiilor este arbitrară.

Fiecare linie conține N caractere. Primul caracter reprezintă starea becului numerotat cu 1, iar ultimul caracter, starea becului numerotat cu N. Valoarea 0 (zero) corespunde stării OFF (stins), iar valoarea 1 (unu) corespunde stării ON (aprins).

Exemplu:

0000000000

0110110110

0101010101

În acest exemplu există trei configurații finale posibile:

  • fie toate becurile sunt stinse (OFF);
  • fie becurile numerotate cu 1, 4, 7, 10 sunt stinse (OFF) și becurile 2, 3, 5, 6, 8, 9 sunt aprinse (ON);
  • fie becurile numerotate cu 1, 3, 5, 7, 9 sunt stinse (OFF) și becurile 2, 4, 6, 8, 10 sunt aprinse (ON).

Restricții

Valorile parametrilor N și C sunt:

10 Ł N Ł 100, 1 Ł C Ł 10000

Numărul becurilor impuse a fi aprinse atât în configurația inițială cât și în cea finală este mai mic sau egal cu 2.

Pentru orice fișier de intrare există cel puțin o configurație finală posibilă.

P099804: Dreptunghiuri

Pe un perete se lipesc mai multe postere, fotografii și alte desene de forme dreptunghiulare. Laturile sunt paralele cu axele de coordonate. Dreptunghiurile se pot suprapune parțial sau integral. Lungimea marginilor (contururilor) reuniunii tuturor dreptunghiurilor se va numi perimetru.

Cerințe

Să se calculeze perimetrul.

În figura 1 avem un exemplu cu 7 dreptunghiuri:

Figura 1. O mulțime de 7 dreptunghiuri

Perimetrul căutat este suma lungimilor din figura 2:

Figura 2. Perimetrul reuniunii dreptunghiurilor

Date de intrare

Pe prima linie a fișierului de intrare PICTURE.IN se află un număr ce reprezintă numărul figurilor dreptunghiulare. Pe următoarele linii sunt scrise coordonatele întregi ale colțurilor stânga-jos și dreapta-sus ale dreptunghiurilor. Valorile acestor coordonate sunt date sub forma unor perechi ordonate (prima coordonată este x, iar a doua este y).

Exemplu:

7

-15 0 5 10

-5 8 20 25

15 -4 24 14

0 -6 16 4

2 15 10 22

30 10 36 20

34 0 40 16

Acest fișier corespunde exemplului din figura 1.

Date de ieșire

Fișierul de ieșire PICTURE.OUT trebuie să conțină o singură linie pe care este scris un număr întreg nenegativ reprezentând perimetrul obținut pentru dreptunghiurile din fișierul de intrare.

Corespunzător exemplului dat, în fișierul de ieșire trebuie scris:

228

Restricții

0 Ł numărul de dreptunghiuri < 5000

Toate valorile coordonatelor sunt numere întregi și aparțin intervalului [-10000, 10000] și fiecare dreptunghi are arie pozitivă. Valoarea numerică a rezultatului necesită o reprezentare pe 32 de biți.

P099805: Poligon

Poligon este un joc pentru un singur jucător și se realizează pe un poligon având N vârfuri. În figura 1 avem N = 4 vârfuri. Fiecărui vârf îi este atașat un număr întreg, iar fiecare latură este marcată cu unul din caracterele + (adunare), respectiv * (produs). Laturile sunt numerotate de la 1 până la N.

Figura 1. Reprezentarea grafică a unui poligon

La primul pas se va elimina o latură.

Următorii pași se vor realiza, fiecare, conform descrierii:

  • se alege o latură E și cele două vârfuri V1 și V2 legate prin latura E;
  • acestea se înlocuiesc cu un vârf nou căruia i se atașează rezultatul operației corespunzătoare semnului din dreptul laturii E aplicate celor două valori atașate vârfurilor V1 și V2.

Jocul se termină când nu mai sunt laturi de eliminat și a rămas un singur vârf căruia îi este atașat scorul jocului.

Exemplu:

Fie poligonul din figura 1. Dacă jucătorul la primul pas șterge latura 3, efectul este vizibil în figura 2:

Figura 2. Eliminarea laturii 3

La următorul pas, jucătorul alegând latura 1, va obține:

Figura 3. Efectul pasului doi

apoi, alegând latura 4, va obține:

Figura 4. Efectul pasului trei

și în final, alegând latura 2 va obține scorul final 0.

Figura 5. Efectul ultimului pas

Cerințe

Să se determine cel mai mare scor posibil de obținut pentru un poligon dat și să se formeze lista acelor laturi care, dacă sunt eliminate la primul pas, conduc la variante de realizări ale jocului, cu același scor final.

Date de intrare

Fișierul de intrare POLYGON.IN descrie un poligon având N vârfuri. Fișierul are două linii. Pe prima linie este scris numărul N. A doua linie conține marcajele atașate laturilor și valorile atașate vârfurilor în felul următor: primul element este marcajul atașat laturii 1, urmează valoarea numerică atașată vârfului dintre prima și a doua latură, apoi avem marcajul celei de-a doua laturi și așa mai departe, ultimul element reprezentând valoarea numerică atașată vârfului dintre laturile având numerele de ordine N și 1. Aceste elemente sunt separate prin câte un spațiu. Marcajul atașat unei laturi poate fi litera t (reprezentând +) sau litera x (reprezentând *).

Exemplu:

4

t -7 t 4 x 2 x 5

Aceste date corespund poligonului din figura 1.

Date de ieșire

Pe prima linie a fișierului POLYGON.OUT se va scrie scorul maxim posibil, obținut pentru poligonul dat. Pe cea de-a doua linie se va scrie lista numerelor de ordine ale laturilor care, dacă sunt eliminate la primul pas, conduc la variante de realizări ale jocului cu același scor final, scris pe prima linie. Numerele de ordine ale laturilor se vor scrie în ordine crescătoare, separate printr-un singur spațiu.

Corespunzător exemplului dat, conținutul fișierului de ieșire trebuie să fie:

33

1 2

Restricții

3 Ł N Ł 50

Pentru orice secvență de pași, numerele atașate vârfurilor aparțin intervalului [-32768, 32767].

P099806: Cer înstelat

Noaptea, pe cer, stelele apar în grupări având diferite forme. O grupare este o mulțime nevidă de stele învecinate, adiacente pe orizontală, verticală sau diagonală. O grupare nu poate să aparțină unei alte grupări mai mari.

Două grupări se consideră similare dacă ele au aceeași formă și același număr de stele, indiferent de poziția și orientarea grupărilor. Numărul posibil de orientări pentru o grupare este opt, conform figurii 1.

Figura 1. Cele opt grupări similare

Cerului înstelat îi corespunde o hartă reprezentată printr-o matrice bidimensională, având elemente 0 și 1. Valoarea 1 semnifică prezența unei stele. Dacă pe hartă într-o poziție nu este stea, valoarea corespunzătoare în matrice este 0.

Cerințe

Dându-se o hartă a cerului, marcați cu litere mici toate grupările determinate. Grupările similare trebuie să fie marcate cu aceeași literă; cele nesimilare se vor marca cu litere diferite.

Veți marca o grupare înlocuind valorile 1 cu litere mici, folosind aceeași literă mică pentru toată gruparea.

Date de intrare

Pe primele două linii ale fișierului STARRY.IN sunt scrise două numere, reprezentând numărul de coloane W, respectiv numărul de linii H ale hărții.

Harta este dată pe următoarele H linii, a câte W caractere pe fiecare linie.

Exemplu:

23

9

00000000110000001000000

01110010000100101000010

01010000000000101101000

01110010101110001001011

00000110001010011101010

00000000001110000001000

01111101000000010001000

00000000000111110100010

00111000000001010110000

În acest exemplu harta are 23 coloane și 9 linii. Pentru a fi exemplul mai clar, vă precizăm că acestui fișier de intrare îi corespunde următoarea imagine a cerului.

Figura 2. Imaginea cerului

Date de ieșire

Fișierul de ieșire STARRY.OUT conține aceeași hartă ca fișierul de intrare STARRY.IN, cu deosebirea că grupările sunt marcate conform cerințelor.

Exemplu:

00000000ff000000c000000

0aaa00d0000d00f0c0000d0

0a0a0000000000f0cc0b000

0aaa00g0d0aaa000c00b0gg

00000gg000a0a00ccc0b0g0

0000000000aaa000000b000

0bbbbb0d0000000c000b000

00000000000ccccc0g000d0

00eee00000000c0c0gg0000

Acest conținut reprezintă unul din rezultatele posibile ale fișierului de ieșire; altele se pot obține marcând grupările cu alte litere.

Imaginea următoare corespunde fișierului de ieșire prezentat mai sus.

Figura 3. Imagine cu grupările marcate

Restricții

0 Ł W (numărul de coloane ale matricei) Ł 100

0 Ł H (numărul de linii ale matricei) Ł 100

0 Ł Numărul grupărilor Ł 500

0 Ł Numărul grupărilor nesimilare Ł 26 (a..z)

1 Ł Numărul stelelor dintr-o grupare Ł 160

[cuprins]