#4405
Prin operația de unificare a două numere naturale a și b înțelegem obținerea celui mai mare număr care se poate forma din cifrele distincte din scrierea numărului a și cifrele distincte din scrierea numărului b. Determinați și afișați:
1. cel mai mare număr de exact k cifre din șirul dat;
2. cel mai mare număr care poate fi obținut prin unificarea a două valori aflate pe poziții alăturate în șirul dat;
3. cel mai mare număr care se poate obține prin unificarea a k valori aflate pe poziții consecutive în șirul dat.
OJI 2023, clasa a VI-a
| Problema | unificare | Operații I/O |
unificare.in/unificare.out
|
|---|---|---|---|
| Limita timp | 0.1 secunde | Limita memorie |
Total: 64 MB
/
Stivă 8 MB
|
| Id soluție | #63380427 | Utilizator | |
| Fișier | unificare.cpp | Dimensiune | 1.89 KB |
| Data încărcării | 28 Februarie 2026, 20:45 | Scor/rezultat | Eroare de compilare |
unificare.cpp:1:21: warning: extra tokens at end of #include directive [enabled by default] #include <iostream> #include <fstream> using namespace std; // Folosim variabile globale pentru a evita depășirea memoriei "stack" int a[100005]; bool apare[100005][10]; int fr_max[10], fr_acum[10]; int main() { ifstream fin("unificare.in"); ofstream fout("unificare.out"); int cerinta, n, k; fin >> cerinta >> n >> k; for (int i = 1; i <= n; i++) { fin >> a[i]; int copie = a[i]; if (copie == 0) { apare[i][0] = true; } else { while (copie > 0) { apare[i][copie % 10] = true; copie /= 10; } } } if (cerinta == 1) { int maxim = -1; for (int i = 1; i <= n; i++) { int nr_cif = 0; int copie = a[i]; if (copie == 0) nr_cif = 1; else { while (copie > 0) { nr_cif++; copie /= 10; } } if (nr_cif == k && a[i] > maxim) maxim = a[i]; } fout << maxim << endl; } else { int L = (cerinta == 2) ? 2 : k; // Prima fereastră for (int i = 1; i <= L; i++) { for (int c = 0; c <= 9; c++) { if (apare[i][c]) fr_acum[c]++; } } for (int c = 0; c <= 9; c++) fr_max[c] = fr_acum[c]; // Glisăm fereastra for (int i = L + 1; i <= n; i++) { for (int c = 0; c <= 9; c++) if (apare[i - L][c]) fr_acum[c]--; for (int c = 0; c <= 9; c++) if (apare[i][c]) fr_acum[c]++; // --- LOGICA NOUĂ DE COMPARARE --- long long lungime_acum = 0, lungime_max = 0; for (int c = 0; c <= 9; c++) { lungime_acum += fr_acum[c]; lungime_max += fr_max[c]; } bool este_mai_mare = false; if (lungime_acum > lungime_max) { este_mai_mare = true; } else if (lungime_acum == lungime_max) { // Dacă au aceeași lungime, verificăm cifrele de la 9 la 0 for (int c = 9; c >= 0; c--) { if (fr_acum[c] > fr_max[c]) { este_mai_mare = true; break; } else if (fr_acum[c] < fr_max[c]) { break; } } } if (este_mai_mare) { for (int c = 0; c <= 9; c++) fr_max[c] = fr_acum[c]; } } // Afișăm rezultatul bool ceva_afisat = false; for (int c = 9; c >= 0; c--) { for (int j = 1; j <= fr_max[c]; j++) { fout << c; ceva_afisat = true; } } if (!ceva_afisat) fout << 0; fout << endl; } return 0; } ^ /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 21 has invalid symbol index 22 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2 /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o: In function \`_start': (.text+0x18): undefined reference to \`main' collect2: error: ld returned 1 exit status
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema unificare face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
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ă.