Autor: Mihai Nan
Într-un mic oraș liniștit, unde serile erau mai lungi decât zilele, trăia un elev pe nume Algorel. Nu era cunoscut pentru sport sau pentru povești spuse în pauze, ci pentru altceva: o pasiune tăcută, dar arzătoare: algoritmica.
În fiecare noapte, după ce luminile orașului se stingeau, ecranul lui rămânea aprins. Acolo, în fața lui, se deschidea o lume diferită: lumea problemelor de pe Codeforces. Nu erau simple exerciții. Erau enigme, fiecare cu propria personalitate, fiecare cerând răbdare, intuiție și curaj.
Ani la rând, Algorel a rezolvat probleme. A greșit. A revenit. A învățat. A început să vadă tipare acolo unde alții vedeau doar text. Unele probleme păreau despre șiruri, dar ascundeau programare dinamică. Altele păreau simple, dar erau, de fapt, despre grafuri sau teoria numerelor.
Într-o zi, profesorul său i-a oferit o provocare diferită.
„Nu mai vreau să rezolvi probleme!” i-a spus.
„Vreau să le înțelegi.”
I-a oferit o arhivă, un fragment din vasta colecție Codeforces, și o sarcină aparent simplă, dar profundă: să învețe să recunoască esența fiecărei probleme.
Dar Algorel a simțit imediat că această provocare merge mai departe decât algoritmica standard.
Nu mai era doar despre soluții.
Era despre recunoașterea tiparelor, despre clasificare, despre abstractizare.
Exact aceleași idei care stau la baza Inteligenței Artificiale.
A început să vadă legături peste tot:
Profesorul său a observat schimbarea.
„Acum înțelegi!” i-a spus.
„Algoritmica nu se poate distinge de Inteligența Artificială, deoarece este fundația ei.”
Dar provocarea era prea mare pentru un singur elev.
Așa că profesorul a luat o decizie.
A trimis această arhivă către cei mai străluciți elevi din țară - elevii din lotul național al Olimpiadei de Inteligență Artificială.
Pentru că dacă cineva îl poate ajuta pe Algorel să ducă această misiune la capăt, aceia sunteți voi.
Trebuie să-l ajutați pe Algorel să-l impresioneze pe dascălul său.
Aveți la dispoziție fișierul problems.csv, care conține o colecție de probleme selectate din arhiva Codeforces. Fiecare problemă include:
id – identificator unictitle – titlul problemeidescription – descriere detaliatăstatement – enunț completinput_format – formatul datelor de intrareoutput_format – formatul datelor de ieșireexamples – exempletime_limit – limita de timpmemory_limit – limita de memorierating – dificultate estimatăFiecare problemă ascunde un tipar. Uneori evident. Alteori bine deghizat.
Pentru fiecare problemă din problems.csv, trebuie să determinați categoria algoritmică principală.
Etichetele posibile sunt:
["dp", "geometry", "graphs", "number theory", "strings"]dp (Programare Dinamică)Problemele din această categorie implică descompunerea unei probleme în subprobleme mai mici și reținerea rezultatelor deja calculate în vederea reutilizării. Accentul este pus pe optimizare și eficiență, evitând recalculările inutile prin memorarea soluțiilor intermediare.
geometry (Geometrie)Aceste probleme se bazează pe concepte geometrice precum puncte, segmente, unghiuri, arii sau distanțe. Ele pot implica calcule în plan sau spațiu și sunt adesea legate de reprezentarea și analiza formelor sau a pozițiilor relative.
graphs (Grafuri)Problemele de grafuri modelează relații între obiecte sub formă de noduri și muchii. Acestea includ parcurgeri (BFS, DFS), determinarea drumurilor, componente conexe, cicluri sau optimizări pe rețele.
number theory (Teoria Numerelor)Această categorie cuprinde probleme bazate pe proprietăți ale numerelor întregi: divizibilitate, numere prime, factorizare, resturi și operații modulare. Sunt frecvente conceptele matematice riguroase și optimizările bazate pe ele.
strings (Șiruri de caractere)Problemele din această categorie implică manipularea și analiza șirurilor de caractere. Ele pot include căutare de pattern-uri, comparări, transformări sau verificări de proprietăți ale textului.
Trebuie să generați un fișier CSV cu următoarea structură:
id,labelPROBLEM_0001,stringsPROBLEM_0002,strings....Pentru fiecare problemă se consideră o singură categorie - cea principală.
Deși multe probleme pot îmbina concepte din mai multe arii (de exemplu, grafuri combinate cu programare dinamică sau șiruri cu teoria numerelor), în cadrul acestei evaluări fiecare problemă este etichetată unic, în funcție de esența sa dominantă.
Pentru cazurile ambigue, unde alegerea nu este evidentă, profesorul lui Algorel a apelat la un cerc restrâns de propunători experimentați de probleme și experți în competiții algoritmice, oameni care au contribuit de-a lungul timpului la crearea unor probleme de nivel înalt. Împreună, aceștia au stabilit categoria cea mai relevantă pentru fiecare problemă, chiar și atunci când aceasta acoperea mai multe arii tematice.
Punctajul pentru această problemă este de 100 puncte.
Evaluarea se face prin compararea etichetelor prezise cu cele stabilite de experți.
Se utilizează metrica Macro-F1, care evaluează performanța modelului pe fiecare categorie în mod egal, indiferent de distribuția datelor.
Pentru fiecare categorie c:
ccScorul F1 pentru categoria c este:
Scorul final Macro-F1 este media scorurilor F1 pentru toate categoriile:
unde K = 5 reprezintă numărul de categorii.
Punctajul final se calculează astfel: