Lista de probleme 50

Filtrare

ramen

#2450

Ai deschis recent un restaurant cu specific japonez, iar lucrurile nu merg grozav. Uneori clienții ajung să aștepte foarte mult mâncarea comandată, iar acum crezi că ai înțeles de ce se întâmplă acest lucru.
Restaurantul nu are mese, ci un singur bar foarte lung dotat cu o bandă rulantă care transportă porțiile de mâncare de la bucătărie la client. Barul are 500.000.000 de scaune numerotate în ordine crescătoare, scaunul 1 fiind cel mai apropiat de bucătărie. Uneori clienții fac noi comenzi. O comandă făcută la secunda T de către clientul aflat pe scaunul cu numărul P va ajunge instant la bucătărie. Prepararea mâncării va dura D secunde, iar apoi mâncarea va fi pusă pe bandă și va dura exact P secunde ca aceasta să ajungă la client. În acest timp, mâncarea va trece prin fața scaunelor 1, 2, … P - 1. Dacă dintr-un anumit motiv clientul nu își ridică mâncarea de pe bandă, aceasta va continua să se deplaseze. În caz contrar, clientul în cauză se așteaptă ca mâncarea să ajungă la scaunul său la secunda T + D + P.
Deocamdată restaurantul servește un singur fel de mâncare: ramen. Astfel, comenzile făcute de clienți ajung să fie ușor interschimbabile, iar aceștia se arată foarte deschiși la a profita de pe urma acestui fapt. Se cunosc următoarele:

  • Un client poate avea zero sau mai multe comenzi în așteptare.
  • Un client care are zero comenzi în așteptare este complet inactiv.
  • Numărul de comenzi în așteptare ale unui client care face o comandă la secunda T va crește cu o unitate exact la secunda T.
  • Un client care are în așteptare cel puțin o comandă va ridica de pe bandă prima porție de ramen care trece prin fața sa, indiferent dacă aceasta îi era destinată sau nu. Dacă va face acest lucru la momentul T, numărul său de comenzi în așteptare va scădea cu o unitate exact la momentul T.

Pentru a evalua impactul acestui obicei asupra timpilor de așteptare, ai obținut date despre toate comenzile date în ziua curentă. Îți propui să afli, pentru fiecare comandă următoarea valoare: dacă respectiva comandă este a NR-a făcută de clientul respectiv, care este secunda la care clientul în cauză va mânca pentru a NR-a oară?

Se dă o listă, inițial vidă, cu numere. Toor dorește să completeze lista asta, adăugând numere pe care le consideră importante pentru cmmdc. La fiecare moment, dorește să afle cmmdc-ul tuturor numerelor care sunt în listă atunci. Câteodată, scoate un număr care este în listă, pentru a putea adăuga ulterior altele. Prin convenție, cmmdc-ul unei mulțimi cu 0 elemente este 1. Să se determine după fiecare operație cmmdc-ul mulțimii actuale de numere.

Pixeli

#3541

RAU-Gigel este pasionat de grafică, așa că se gândește la un joc cu imagini. El creează într-un editor grafic o imagine bitmap binară de dimensiuni N X N pixeli. O imagine bitmap binară este o matrice de pixeli, fiecare pixel fiind un bit. Să considerăm că valoarea 0 (nesetat) înseamnă alb și valoarea 1 (setat) înseamnă negru (în realitate este exact invers!). Apoi RAU-Gigel împarte imaginea în patru imagini pătrate egale de latură N / 2 pe care le notează de la 1 la 4 (1 este imaginea din colțul dreapta-sus, 2 este cea din colțul dreapta-jos, 3 stânga-jos și 4 stânga-sus). El repetă procedeul pentru fiecare dintre cele 4 imagini obținute, și tot așa, reducând mereu latura la jumătate și notând direcțiile de la 1 la 4, până când ajunge la imagini de mărimea unui pixel.

Pentru simplitate, să presupunem că N este o putere a lui 2, să spunem K. Deci, după K împărțiri succesive de imagini, orice pixel poate fi identificat printr-un șir unic format din cifrele 1, 2, 3 și 4, de lungime K. Inițial, imaginea este complet albă.

Acum începe jocul. RAU-Gigel se gândește la 2 tipuri de operaţii:
Operaţia 1 x schimbă starea pixelul identificat cu șirul x, descris ca mai sus. Dacă pixelul x nu este setat, îl setează. Dacă pixelul x este deja setat, atunci îl resetează.
Operaţia 2 x , unde x are aceeași semnificație ca mai sus, este o interogare: dacă x este setat, se răspunde cu 0. Dacă x nu este setat, se cere determinarea dimensiunii celei mai mari imagini complet albe, dintre cele create de RAU-Gigel, care conține pixelul x. Dimensiunea este dată de numărul de pixeli conținut.

Dându-se N cu semnificația de mai sus și M, reprezentând numărul de operaţii şi cele M operaţii de tipul 1 și 2, să se răspundă la operaţiile de tip 2.

Pentru o permutare p1, p2, …, pN a numerelor de la 1 la N și o poziție K, (1 ≤ K ≤ N), notăm cu BestK numărul minim de interschimbări (a valori situate pe poziții consecutive) necesare pentru a se obține o permutare descrescătoare de la poziția 1 la poziția K și crescătoare de la poziția K la poziția N. Se dă o permutare. Se cere să se rezolve una dintre următoarele două cerințe:
1. Pentru o poziție K dată să se calculeze BestK.
2. Pentru toate pozițiile K de la 1 la N să se calculeze BestK.

catmin

#3780

Se dau N numere naturale nenule a[1], a[2], …, a[N]. Să se construiască un număr minim folosind toate cifrele numerelor date astfel încât șirul cifrelor fiecărui număr să apară ca subșir în numărul minim construit.

Lot informatică 2021

addk

#3861

Se consideră un şir A cu N elemente numere naturale A[1], ..., A[N] si un număr natural K. Se cere să se proceseze Q cerinţe de următoarele două tipuri:

  • 1 i1 i2 ... iK: se permută circular la stânga elementele şirului A[i1], …, A[iK]. Astfel noile valori ale elementelor A[i1], A[i2], …, A[iK-1], A[iK] vor fi A[i2], A[i3], …, A[iK], A[i1]. Remarcaţi că i1, …, iK sunt distincte şi nu neapărat in ordine crescătoare.
  • 2 l r m: se cere calculul sumei elementelor tuturor subsecvenţelor continue de lungime m din secvenţa A[il], A[il+1], …, A[ir-1], A[ir]. Remarcaţi că elementele care apar în mai multe secvenţe vor fi adunate de mai multe ori.

CFR C++

#4145

RAU-Gigel se joacă cu noul său set de cale ferată, primit cadou de ziua lui anul acesta. Setul conține N gări distincte din diverse orașe reprezentative ale României (București, Iași, Sebeș, …), numerotate în continuare, pentru simplitate, cu numere de la 1 la N și N – 1 bucăți de șină care pot conecta între ele câte două gări distincte date (conexiunea este bidirecțională) astfel încât folosind aceste șine există un drum unic alcătuit din șine între oricare două gări distincte. Ca orice jucărie, fiecare din cele N – 1 bucăți de șină are un grad de periculozitate asociat acesteia, o valoare exprimată printr-un număr natural nenul (nimeni nu este perfect până la urmă, nici jucăriile), pentru a ști de la ce vârsta ar fi bine să poată fi folosite de copii, de exemplu. De asemenea, toate bucățile de șină au aceeași lungime constantă, de o unitate.

RAU-Gigel își desfășoară joaca pe parcursul a Q zile și în fiecare zi este supravegheat de câte un membru al familiei pentru a fi în siguranță. Din nefericire pentru el, în fiecare din cele Q zile persoana care îl supraveghează îi încurcă puțin planurile, permițându-i să folosească doar șinele care au gradul de periculozitate cel mult M (inclusiv M), o valoare naturală nenulă aleasă de aceasta (de remarcat că poate mereu folosi toate gările). Astfel, folosind toate șinele pe care le are la dispoziție pentru a conecta între ele gările corespunzătoare, va obține una sau mai multe așezări conexe maximale de gări (există un drum unic alcătuit din șine între oricare două gări distincte dintr-o așezare) pe care le va numi în continuare orașe. În fiecare astfel de zi, personajul nostru principal primește de la persoana care îl supraveghează un număr natural nenul K de bucăți de șină considerate perfect sigure pentru joaca copilului de către respectivul supraveghetor, cu care poate conecta oricare două gări distincte dorește. De asemenea, șinele primite îi sunt luate la finalul zilei (poate că persoana respectivă mai supraveghează și alți copii în următoarele zile și mai are nevoie de ele).

RAU-Gigel consideră că un lanț este un șir de una sau mai multe gări distincte astfel încât oricare două gări adiacente din acesta sunt conectate de exact o șină, iar lanțul de lungime maximă este cel format dintr-un număr maxim de bucăți de șină (astfel, lungimea unui lanț este dată de numărul de bucăți de șină din care este alcătuit). Scopul acestuia este ca în fiecare zi să formeze un singur lanț cât mai lung având la dispoziție șinele primite de la supraveghetor și cel mult câte un lanț din fiecare oraș creat de acesta, la alegere (adică pentru fiecare oraș poate să aleagă exact un lanț din el (oricare dorește) sau să nu folosească niciun lanț din acel oraș).

meeting

#4142

Prietenii lui RAU-Gigel vor să-i facă o surpriză de ziua lui! Pentru aceasta, ei trebuie să se întâlnească într-un singur loc pentru a se putea organiza mai eficient. Poți să-i ajuți cu cunoștințele tale informatice să rezolve această problemă?

RAU-Gigel și Vlad sunt prieteni buni și le place tot timpul să se provoace unul pe altul. De data aceasta, RAU-Gigel a inventat o problemă interesantă de matematică.

Acesta are un arbore secret cu N noduri (numerotate de la 1 la N), în care fiecare nod are asociată o valoare (pe lângă numărul său de ordine din arbore), care este un număr natural și ii spune lui Vlad informații despre unele drumuri din acest arbore. O informație are forma x, y, val și reprezintă faptul că lanțul din arbore de la nodul x la nodul y are cel mai mare divizor comun al valorilor asociate nodurilor acestuia egal cu val, unde val este un număr natural nenul.

Vlad știe că RAU-Gigel minte câteodată și s-ar putea ca unele dintre restricțiile date să fie eronate, astfel că vrea să afle întâi folosind informațiile ce le are la îndemână dacă ar putea exista un arbore care să respecte toate restricțiile date de prietenul său.

Pentru că știe ce programator iscusit ești, Vlad ți-ar fi foarte recunoscător daca l-ai putea ajuta cu această problemă prin a scrie un program care să o rezolve cât mai eficient.

Dexter și-a deschis un laborator nou în care vrea să efectueze o serie de experimente pe șoareci pentru a descoperi leacul pentru cancer. În laborator există N șoareci, care se află așezați într-un cerc și sunt numerotați în ordine de la 0 la N-1. Dexter efectuează, pe rând, M experimente. Pentru fiecare experiment șoarecii care participă la al i-lea experiment formează întotdeauna un interval continuu, exprimat sub forma unei perechi de numere (S[i], F[i]), având semnificația:

  • dacă S[i] ≤ F[i], atunci șoarecii S[i], S[i]+1, ..., F[i] participă la experimentul i;
  • dacă S[i] > F[i], atunci șoarecii S[i], S[i]+1, ..., N-2, N-1, 0, ..., F[i] participă la experimentul i.

La fiecare pas, Dexter vrea să știe câți din cei N șoareci au participat la toate experimentele efectuate până atunci. Altfel spus, după fiecare al i-lea experiment efectuat, să se determine numărul de șoareci care au participat la toate experimentele 1, 2, ..., i.

OJI 2025, clasele 11-12

Du-te sus!