Advertisement
PlanttPastes

Точно решение на задачата Палиндроми - МЕНДО

Oct 25th, 2021
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. /// O(200K + 100M) vo najlos slucaj
  2. /*
  3. input
  4. broj na cekori niza(100000): -1 znaci ne visited
  5. for za palindromi {
  6.   dodadi vo vector
  7. }
  8. bfs (!queue.empty()) {
  9.   queue rabota
  10.   for za palindromi {
  11.     dodadi vo queue
  12.     broj na cekori niza dodadi
  13.   }
  14. }
  15. output
  16. */
  17. #include <bits/stdc++.h>
  18. using namespace std;
  19. bool isPalindrome(int i)
  20. {
  21.     int reversedI = 0, iCopy = i;
  22.     while (i)
  23.     {
  24.         reversedI *= 10;
  25.         reversedI += i % 10;
  26.         i /= 10;
  27.     }
  28.     return iCopy == reversedI;
  29. }
  30. int main()
  31. {
  32.     int s, e;
  33.     cin >> s >> e;
  34.     vector <int> broj_na_cekori(100000), palindromi;
  35.     for (int i = 0; i < 100000; i++)
  36.     {
  37.         if (isPalindrome(i))
  38.             palindromi.push_back(i);
  39.     }
  40.     for (int &x : broj_na_cekori)
  41.         x = -1;
  42.     queue <int> broevi_pending;
  43.     broevi_pending.push(s);
  44.     broj_na_cekori[s] = 0;
  45.     while (broevi_pending.front() != e)
  46.     {
  47.         for (int i = 2; palindromi[i] < broevi_pending.front(); i++)
  48.         {
  49.             if (palindromi[i] + broevi_pending.front() <= e && broj_na_cekori[palindromi[i] + broevi_pending.front()] == -1)
  50.             {
  51.                 broevi_pending.push(palindromi[i] + broevi_pending.front());
  52.                 broj_na_cekori[palindromi[i] + broevi_pending.front()] = broj_na_cekori[broevi_pending.front()] + 1;
  53.             }
  54.         }
  55.         broevi_pending.pop();
  56.     }
  57.     cout << broj_na_cekori[e];
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement