Detalii evaluare #58736964

Rezumat problemă

#2556

Fie N un număr natural și expresia \( H_N = 1 + \frac{1}{2} + \frac{1}{3} + … + \frac{1}{N}\). Determinați numerele naturale P și Q ce reprezintă numărătorul respectiv numitorul fracției ireductibile \( H_N = \frac{P}{Q}\).

Balcaniada de Informatică 2018, ziua 1
Fișiere Pracsiu Dan (dnprx) Ciprian Cheșcă concurs

Detalii

Problema hn Operații I/O hn.in/hn.out
Limita timp 0.2 secunde Limita memorie Total: 128 MB / Stivă 32 MB
Id soluție #58736964 Utilizator Raduta Mihail (Mihailraduta)
Fișier hn.cpp Dimensiune 6.42 KB
Data încărcării 28 Iulie 2025, 19:18 Scor/rezultat Eroare de compilare

Evaluare

Mesaj compilare

hn.cpp:3:1: error: stray '\`' in program
 }\`\`\`

 ^
hn.cpp:3:1: error: stray '\`' in program
hn.cpp:3:1: error: stray '\`' in program
hn.cpp:4:1: error: stray '\304' in program
 Această buclă execută \`N\` împărțiri și \`N\` adunări pe numere mari. Aici vom concentra toate eforturile noastre.

 ^
hn.cpp:4:1: error: stray '\203' in program
hn.cpp:4:1: error: stray '\304' in program
hn.cpp:4:1: error: stray '\203' in program
hn.cpp:4:1: error: stray '\304' in program
hn.cpp:4:1: error: stray '\203' in program
hn.cpp:4:1: error: stray '\`' in program
hn.cpp:4:1: error: stray '\`' in program
hn.cpp:4:1: error: stray '\303' in program
hn.cpp:4:1: error: stray '\256' in program
hn.cpp:4:1: error: stray '\304' in program
hn.cpp:4:1: error: stray '\203' in program
hn.cpp:4:1: error: stray '\310' in program
hn.cpp:4:1: error: stray '\233' in program
hn.cpp:4:1: error: stray '\310' in program
hn.cpp:4:1: error: stray '\231' in program
hn.cpp:4:1: error: stray '\`' in program
hn.cpp:4:1: error: stray '\`' in program
hn.cpp:4:1: error: stray '\304' in program
hn.cpp:4:1: error: stray '\203' in program
hn.cpp:6:1: error: stray '##' in program
 ### Strategia de Optimizare Finală

 ^
hn.cpp:6:3: error: stray '#' in program
 ### Strategia de Optimizare Finală

   ^
hn.cpp:6:1: error: stray '\304' in program
 ### Strategia de Optimizare Finală

 ^
hn.cpp:6:1: error: stray '\203' in program
hn.cpp:8:1: error: stray '\`' in program
 1.  **Directive de Compilator (\`#pragma\`)**: Acestea sunt instrucțiuni speciale pe care le dăm direct compilatorului (precum GCC, folosit pe majoritatea platformelor de concurs) pentru a-i cere să optimizeze codul în mod agresiv.

 ^
hn.cpp:8:33: error: stray '#' in program
 1.  **Directive de Compilator (\`#pragma\`)**: Acestea sunt instrucțiuni speciale pe care le dăm direct compilatorului (precum GCC, folosit pe majoritatea platformelor de concurs) pentru a-i cere să optimizeze codul în mod agresiv.

                                 ^
hn.cpp:8:1: error: stray '\`' in program
 1.  **Directive de Compilator (\`#pragma\`)**: Acestea sunt instrucțiuni speciale pe care le dăm direct compilatorului (precum GCC, folosit pe majoritatea platformelor de concurs) pentru a-i cere să optimizeze codul în mod agresiv.

 ^
hn.cpp:8:1: error: stray '\310' in program
hn.cpp:8:1: error: stray '\233' in program
hn.cpp:8:1: error: stray '\304' in program
hn.cpp:8:1: error: stray '\203' in program
hn.cpp:8:1: error: stray '\304' in program
hn.cpp:8:1: error: stray '\203' in program
hn.cpp:8:1: error: stray '\303' in program
hn.cpp:8:1: error: stray '\256' in program
hn.cpp:9:5: error: stray '\`' in program
     *   \`#pragma GCC optimize("O3", "unroll-loops")\`: Aceasta este cea mai importantă directivă.

     ^
hn.cpp:9:10: error: stray '#' in program
     *   \`#pragma GCC optimize("O3", "unroll-loops")\`: Aceasta este cea mai importantă directivă.

          ^
hn.cpp:9:5: error: stray '\`' in program
     *   \`#pragma GCC optimize("O3", "unroll-loops")\`: Aceasta este cea mai importantă directivă.

     ^
hn.cpp:9:5: error: stray '\304' in program
hn.cpp:9:5: error: stray '\203' in program
hn.cpp:9:5: error: stray '\304' in program
hn.cpp:9:5: error: stray '\203' in program
hn.cpp:10:9: error: stray '\`' in program
         *   \`"O3"\`: Activează cel mai înalt nivel de optimizare standard, care include zeci de tehnici de transformare a codului pentru viteză.

         ^
hn.cpp:10:9: error: stray '\`' in program
hn.cpp:10:9: error: stray '\304' in program
hn.cpp:10:9: error: stray '\203' in program
hn.cpp:10:9: error: stray '\303' in program
hn.cpp:10:9: error: stray '\256' in program
hn.cpp:10:9: error: stray '\304' in program
hn.cpp:10:9: error: stray '\203' in program
hn.cpp:11:9: error: stray '\`' in program
         *   \`"unroll-loops"\`: Îi spune explicit compilatorului să "desfășoare" buclele. Aceasta este exact tehnica pe care ai menționat-o.

         ^
hn.cpp:11:9: error: stray '\`' in program
hn.cpp:11:9: error: stray '\303' in program
hn.cpp:11:9: error: stray '\216' in program
hn.cpp:11:9: error: stray '\304' in program
hn.cpp:11:9: error: stray '\203' in program
hn.cpp:11:9: error: stray '\310' in program
hn.cpp:11:9: error: stray '\233' in program
hn.cpp:13:1: error: stray '\304' in program
 2.  **Loop Unrolling (Desfășurarea Manuală a Buclei)**: Chiar dacă am cerut compilatorului să facă asta, o putem face și manual pentru bucla critică. Acest lucru reduce "overhead"-ul buclei (costul instrucțiunilor de incrementare a contorului \`i\` și de verificare a condiției \`i <= N\`). Prin procesarea mai multor elemente într-o singură iterație, reducem numărul total de iterații. Vom procesa elementele în grupuri de 8.

 ^
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\310' in program
hn.cpp:13:1: error: stray '\231' in program
hn.cpp:13:1: error: stray '\304' in program
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\304' in program
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\304' in program
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\304' in program
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\310' in program
hn.cpp:13:1: error: stray '\231' in program
hn.cpp:13:1: error: stray '\304' in program
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\310' in program
hn.cpp:13:1: error: stray '\233' in program
hn.cpp:13:1: error: stray '\`' in program
hn.cpp:13:1: error: stray '\`' in program
hn.cpp:13:1: error: stray '\310' in program
hn.cpp:13:1: error: stray '\231' in program
hn.cpp:13:1: error: stray '\310' in program
hn.cpp:13:1: error: stray '\233' in program
hn.cpp:13:1: error: stray '\`' in program
hn.cpp:13:1: error: stray '\`' in program
hn.cpp:13:1: error: stray '\303' in program
hn.cpp:13:1: error: stray '\256' in program
hn.cpp:13:1: error: stray '\304' in program
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\310' in program
hn.cpp:13:1: error: stray '\233' in program
hn.cpp:13:1: error: stray '\304' in program
hn.cpp:13:1: error: stray '\203' in program
hn.cpp:13:1: error: stray '\310' in program
hn.cpp:13:1: error: stray '\233' in program
hn.cpp:13:1: error: stray '\303' in program
hn.cpp:13:1: error: stray '\256' in program
hn.cpp:15:1: error: stray '\310' in program
 3.  **Optimizarea Accesului la Memorie și a Operațiilor**:

 ^
hn.cpp:15:1: error: stray '\231' in program
hn.cpp:15:1: error: stray '\310' in program
hn.cpp:15:1: error: stray '\233' in program
hn.cpp:16:5: error: stray '\310' in program
     *   **Folosirea de referințe constante (\`const&\`)**: În operatorul de adunare, putem prelua rezultatul împărțirii \`Q / i\` printr-o referință constantă pentru a evita o eventuală copie inutilă a obiectului \`BigInt\`.

     ^
hn.cpp:16:5: error: stray '\233' in program
hn.cpp:16:5: error: stray '\`' in program
hn.cpp:16:5: error: stray '\`' in program
hn.cpp:16:5: error: stray '\303' in program
hn.cpp:16:5: error: stray '\216' in program
hn.cpp:16:5: error: stray '\303' in program
hn.cpp:16:5: error: stray '\256' in program
hn.cpp:16:5: error: stray '\304' in program
hn.cpp:16:5: error: stray '\203' in program
hn.cpp:16:5: error: stray '\310' in program
hn.cpp:16:5: error: stray '\233' in program
hn.cpp:16:5: error: stray '\`' in program
hn.cpp:16:5: error: stray '\`' in program
hn.cpp:16:5: error: stray '\310' in program
hn.cpp:16:5: error: stray '\233' in program
hn.cpp:16:5: error: stray '\304' in program
hn.cpp:16:5: error: stray '\203' in program
hn.cpp:16:5: error: stray '\304' in program
hn.cpp:16:5: error: stray '\203' in program
hn.cpp:16:5: error: stray '\304' in program
hn.cpp:16:5: error: stray '\203' in program
hn.cpp:16:5: error: stray '\304' in program
hn.cpp:16:5: error: stray '\203' in program
hn.cpp:16:5: error: stray '\`' in program
hn.cpp:16:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\`' in program
     *   **Operator \`+=\`**: Vom crea un operator \`operator+=\` care modifică direct obiectul \`P\`, în loc să creeze un nou obiect temporar prin \`P + ...\` și apoi să-l atribuie înapoi la \`P\`. Acest lucru elimină multe alocări și de-alocări de memorie.

     ^
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\304' in program
hn.cpp:17:5: error: stray '\203' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\303' in program
hn.cpp:17:5: error: stray '\256' in program
hn.cpp:17:5: error: stray '\304' in program
hn.cpp:17:5: error: stray '\203' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\310' in program
hn.cpp:17:5: error: stray '\231' in program
hn.cpp:17:5: error: stray '\304' in program
hn.cpp:17:5: error: stray '\203' in program
hn.cpp:17:5: error: stray '\303' in program
hn.cpp:17:5: error: stray '\256' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\`' in program
hn.cpp:17:5: error: stray '\304' in program
hn.cpp:17:5: error: stray '\203' in program
hn.cpp:17:5: error: stray '\304' in program
hn.cpp:17:5: error: stray '\203' in program
hn.cpp:17:5: error: stray '\310' in program
hn.cpp:17:5: error: stray '\231' in program
hn.cpp:17:5: error: stray '\304' in program
hn.cpp:17:5: error: stray '\203' in program
hn.cpp:19:1: error: stray '##' in program
 ### Codul Final (Optimizare Extremă)

 ^
hn.cpp:19:3: error: stray '#' in program
 ### Codul Final (Optimizare Extremă)

   ^
hn.cpp:19:1: error: stray '\304' in program
 ### Codul Final (Optimizare Extremă)

 ^
hn.cpp:19:1: error: stray '\203' in program
hn.cpp:21:1: error: stray '\303' in program
 Acest cod încorporează toate tehnicile de mai sus. Este proiectat pentru viteză maximă, păstrând compatibilitatea cu compilatoarele standard.

 ^
hn.cpp:21:1: error: stray '\256' in program
hn.cpp:21:1: error: stray '\304' in program
hn.cpp:21:1: error: stray '\203' in program
hn.cpp:21:1: error: stray '\304' in program
hn.cpp:21:1: error: stray '\203' in program
hn.cpp:21:1: error: stray '\304' in program
hn.cpp:21:1: error: stray '\203' in program
hn.cpp:21:1: error: stray '\304' in program
hn.cpp:21:1: error: stray '\203' in program
hn.cpp:21:1: error: stray '\303' in program
hn.cpp:21:1: error: stray '\242' in program
hn.cpp:23:1: error: stray '\`' in program
 \`\`\`cpp

 ^
hn.cpp:23:1: error: stray '\`' in program
hn.cpp:23:1: error: stray '\`' in program
hn.cpp:1:1: error: expected unqualified-id before 'for'
 for (int i = 1; i <= N; ++i) {

 ^
hn.cpp:1:17: error: 'i' does not name a type
 for (int i = 1; i <= N; ++i) {

                 ^
hn.cpp:1:25: error: expected unqualified-id before '++' token
 for (int i = 1; i <= N; ++i) {

                         ^
hn.cpp:4:1: error: 'Aceast' does not name a type
 Această buclă execută \`N\` împărțiri și \`N\` adunări pe numere mari. Aici vom concentra toate eforturile noastre.

 ^
hn.cpp:26:43: error: expected declaration before end of line
 #pragma GCC optimize("O3", "unroll-loops")

                                           ^

Cum funcționează evaluarea?

www.pbinfo.ro permite evaluarea a două tipuri de probleme:

  • probleme la care rezolvarea presupune scrierea unui program complet
  • probleme la care rezolvarea presupune scrierea unei secvențe de program - câteva instrucțiuni, o listă de declarații, una sau mai multe funcții, etc.

Problema hn face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:

  • Programul sursă este compilat folosind compilatorul corespunzător. Dacă în urma compilării se obțin erori sau avertismente, acestea sunt afișate în această pagină.
  • Dacă programul a fost compilat, executabilul obținut va fi rulat, furnizându-i-se unul sau mai multe seturi de date de intrare, în concordanță cu restricțiile specifice problemei. Pentru fiecare set de date se obține un anumit punctaj, în raport cu corectitudinea soluției tale.

Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.

Du-te sus!