Ma poate ajuta cineva cu o problema pe pb-info. Este problema 1923:
Cerința
Afişaţi, în ordine crescătoare, toate numerele dintr-un anumit interval care au toate cifrele egale.
Sunt două tipuri de cerinţe:
1. Se dau a şi b si se cer toate numerele din intervalul a, b (inclusiv, eventual, capetele).
2. Se da x si se cer toate numerele cu maxim x cifre.
Date de intrare
Din fişierul egale.in se citeşte mai întâi un număr T. Dacă T este 1 pe a doua linie sunt două numere a şi b, separate prin spaţiu. Dacă T este 2, pe a doua linie va fi numărul x.
Date de ieșire
In fişierul egale.out se scriu, pe un rând numerele cerute separate prin câte un spaţiu.
Restricții și precizări
1 <= a <= b <= 1017
1<=x<=100
Pentru 20% din punctaj avem T = 1 şi 1 <= a, b <= 104
Pentru încă 20% din punctaj avem T = 1 şi 108 <= a, b <= 109
Pentru încă 10% din punctaj avem T = 1 şi a, b > 109
Pentru 50% din punctaj avem T=2.
Răspunsuri la întrebare
#include <fstream>
#include <cassert>
using namespace std;
int main() {
ifstream fin("egale.in");
ofstream fout("egale.out");
int op;
fin >> op;
assert(op == 1 || op == 2);
if (op == 1) {
long long a, b;
fin >> a >> b;
assert(a <= b);
//assert(a <= 100000000000000000LL && b <= 100000000000000000LL && a > 1000000000 && b > 1000000000);
long long curr = 1;
while (curr <= b) {
for (int i = 1; i <= 9; ++i)
if (a <= i*curr && i*curr <= b)
fout << i*curr << " ";
curr = curr*10 + 1;
}
fout << "\n";
}
else {
int x;
fin >> x;
assert(x <= 100);
for (int nrCif = 1; nrCif <= x; ++nrCif) {
for (int cif = 1; cif <= 9; ++cif) {
for (int i = 1; i <= nrCif; ++i)
fout << cif;
fout << " ";
}
}
fout << "\n";
}
return 0;
}