Advertisement
chaosagent

Codeforces Round 315 Div 2 C

Aug 10th, 2015
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <cmath>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int lastprime = 2;
  8. int lastprimei = 0;
  9.  
  10. int pi(int n) {
  11.     while (lastprime <= n) {
  12.         while (true) {
  13.             lastprime++;
  14.             bool isprime = true;
  15.             for (int i = 2; i <= (int) ceil(sqrt(lastprime)); i++) {
  16.                 if (lastprime % i == 0) {
  17.                     isprime = false;
  18.                     break;
  19.                 }
  20.             }
  21.             if (isprime) break;
  22.         }
  23.         lastprimei++;
  24.     }
  25.     return lastprimei;
  26. }
  27.  
  28. int palidromize(int n, bool even) {
  29.     int result = n;
  30.     if (!even) n /= 10;
  31.     while (n) {
  32.         result *= 10;
  33.         result += n % 10;
  34.         n /= 10;
  35.     }
  36.     return result;
  37. }
  38.  
  39. int next_palindrome_head = 1;
  40. int next_palindrome_n = 0;
  41. bool next_palindrome_even = false;
  42.  
  43. int rub(int n) {
  44.     while (true) {
  45.         if (palidromize(next_palindrome_head, next_palindrome_even) > n) {
  46.             return next_palindrome_n;
  47.         }
  48.         next_palindrome_head++;
  49.         double next_palindrome_size = log10(next_palindrome_head);
  50.         if (floor(next_palindrome_size) == next_palindrome_size) {
  51.             if (next_palindrome_even) {
  52.                 next_palindrome_even = false;
  53.             } else {
  54.                 next_palindrome_even = true;
  55.                 next_palindrome_head /= 10;
  56.             }
  57.         }
  58.         next_palindrome_n++;
  59.     }
  60. }
  61.  
  62. int main() {
  63.     int p, q;
  64.     scanf("%d %d", &p, &q);
  65.     double factor = ((double) p) / q;
  66.     int n = 0;
  67.     while (++n) {
  68.         if (pi(n) > factor * rub(n)) {
  69.             if (n == 1) {
  70.                 printf("Palindromic tree is better than splay tree\n");
  71.                 return 0;
  72.             }
  73.             printf("%d\n", n - 1);
  74.             return 0;
  75.         }
  76.     }
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement