Model subiect olimpiada de informatică, clasa a 9-a, faza județeană

1 - elicop  100 puncte 
 
Un teren de fotbal este folosit pentru aterizarea elicopterelor. Gazonul de pe stadion este parcelat în pătrăţele de aceeaşi 
dimensiune, cu laturile paralele cu marginile terenului. Liniile cu pătrăţele de gazon sunt numer otate de sus în jos cu 
numerele 1, 2, ..., m, iar coloanele cu pătrăţele de gazon sunt numerotate de la stânga la dreapta cu numerele 1, 2, ..., n. 
Din cauza tipului di ferit de iarbă se ştie care dintre pătrăţele de g azon  sunt afectate sau nu de umbră. Ac est lucru este 
precizat printr-un tablou bidimensional a cu m linii şi n coloane, cu elemente 0 şi 1 ( aij= 0 înseamnă că pătrăţelul aflat 
pe linia i şi coloana j este afectat de umbră, iar  aij= 1 înseamnă că pătrăţelul aflat pe linia i şi coloana j nu este 
afectat de umbră).   Fiecare elicopter are 3 roţi pe care se sprijină. Roţile fiecărui elicopter determină un triunghi 
dreptunghic isoscel. Elicopterele aterizează, astfel încât triunghiurile formate să fie cu catetele paralele cu marginile 
terenului. În exemplul următor avem patru elicoptere. 
1 1 1 1 1 1 1 1 1 
0 0 0 0 1 1 1 1 0 
0 0 1 0 1 1 1 0 0 
1 1 1 0 1 1 0 1 1 
0 0 1 1 1 1 0 1 1 
1 1 1 1 1 1 0 1 1 
1 1 1 1 1 1 0 0 1 
Pentru a preciza poziţia unui elicopter pe teren este suficient să cunoaştem linia şi coloana vărfurilor ipotenuzei  şi 
poziţia vârfului deasupra (codificată prin 1) sau dedesubtul ipotenuzei (codificată prin -1). Pentru exemplu, elicopterul 
din stânga sus este dat prin (1,1), (3,3) şi -1, cel din dreapta sus prin (1,9), (5,5) şi 1, cel din stânga jos prin (5,1), (6,2) şi 
1, iar cel din dreapta jos prin (5,9), (6,8) şi 1.  
Un elicopter se consideră că a aterizat greşițdacă triunghiul format sub el (definit mai sus) are mai mult de jumătate din 
pătrăţele afectate de umbră. 
Administratorul terenului de fotbal doreşte să determine numărul N1 de elicoptere, care nu afectează nici un pătrăţel din 
teren şi numerele de ordine al elicopterelor, care au aterizat greşit în ordine crescătoare: e1, e2, ..., eN2, ştiind că există k 
elicoptere codificate prin numerele 1, 2, ..., k.   
 
Cerinţă 
Scrieţi un program care să determine, pentru fişierul cu datele din  enunţ: numărul de elicoptere  N1, care nu afectează 
nici un pătrăţel din teren şi numerele de ordine al elicopterelor, care au aterizat greşit în ordine crescătoare, precedate de 
numărul lor N2. 
 
Date de intrare 
Prima linie a fişierului de intrare elicop.in conţine două numere naturale  m şi n, separate printr -un spaţiu,  cu 
semnificaţia din enunţ. Următoarele m linii conţin câte n numere 0 sau 1, separate prin câte un spaţiu cu semnificaţia 0 – 
pătrăţel de gazon care este  afectat de umbră, respectiv 1 - pătrăţel care nu este afectat de umbră. Pe linia m+2 se află 
numărul de elicoptere k, iar pe următoarele k linii (în ordinea codificării lor 1, 2, ..., k) câte cinci numere separate prin 
cate un spaţiu, pentru liniile şi coloanele ipotenuzelor şi poziţia vârfului (1 sau -1), triunghiurilor dreptunghice asociate 
elicopterelor:  
L1 C1 L2 C2 p.  
 
Date de ieşire 
Fişierul de ieşire elicop.out va conţine două linii: prima linie numărul N1 de elicoptere, care nu afectează nici un 
pătrăţel din teren, a doua linie cu numerele naturale  N2, e1, e2, ..., eN2 separate prin câte un spaţiu, în ordine  
crescătoare.  
 
Restricţii şi precizări 
• 2 ≤ m,n ≤ 100; 1 ≤ k ≤ 40 
• Nu există suprapuneri de triunghiuri asociate la două elicoptere. Triunghiurile asociate elicopterelor conţin cel puţin 
trei pătrăţele. 
• Pentru determinarea corectă a valorilor N1 se obţine 40% din punctajul unui tesțiar pentru determinarea corectă a 
valorilor  N2, e1, e2, ..., eN2  se obţine 60% din punctajul unui test.
2 - roata           100 puncte 
 
Una dintre atracţiile celebrului parc de distrac ţii Prater din Viena este 
Marea Roată Vieneză. Din ea se poate admira priveliştea întregii Viene.  
Roata are n cabine, numerotate de la 1 la n în sens orar şi dispuse simetric 
pe circumferinţa roţii. Îmbarcarea clienţilor se face  în cabina în care roata 
este tangent ă cu solul, iar r otirea începe cu cabina 1 aflată în poziţia de 
îmbarcare şi se face în sens antiorar. Un client plăteşte pentru o rotire             
1 EUR şi poate cumpăra un număr oarecare de rotiri. 
 
Cei p clienţi care doresc utilizarea roţii trebuie s ă respecte urm ătoarea p rocedură: clientul cu num ărul de 
ordine i îşi cumpără un bilet pe care sunt înscrise numărul său de ordine şi numărul de rotiri ci, 1≤ i ≤ p, apoi 
se aşează la rând . C ând în poziţia de îmbarcare  este o cabin ă liberă sau se eliber ează o cabin ă, roata se 
opreşte şi urcă următorul clientul. Un client coboară după ce se efectuează numărul de rotiri înscris pe bilet. 
 
Cerinţă 
Să se scrie un program care, cunoscând numărul n de cabine al roţii, numărul p de clienţi, precum şi numărul 
de  rotiri cumpărate de fiecare cliențci ,1≤ i ≤ p, să calculeze: 
• suma totală încasată de administratorul roţii de la clienţi; 
• ordinea în care coboară clienţii din roată; 
• numărul cabinei din care coboară ultimul client. 
 
Date de intrare  
Fişierul de intrare roata.in conţine pe primul rând numărul natural n, pe al doilea r ând numărul natural p iar 
pe al treilea rând numerele naturale ci , 1≤ i ≤ p, separate printr-un spaţiu, cu semnificaţiile de mai sus. 
 
Date de ieşire 
Fişierul de ieşire roata.out va conţine pe prima linie suma totală încasată, pe a doua linie numerele de ordine 
ale clienţilor, în ordinea coborârii, separate printr -un spaţiu, iar pe a treia linie numărul cabinei din care va 
coborî ultimul client. 
 
Restricţii şi precizări 
• 2 ≤ n ≤ 360 
• 1 ≤ p ≤ 100 000 
• 1 ≤ ci ≤ 100 000 
• pentru rezolvarea primei cerinţe se acordă 20% din punctaj, iar pentru celelalte două cerinţe se acordă 
câte 40% din punctaj fiecare.