Guest User

Untitled

a guest
Jan 23rd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int t;
  7. long long n, dp[20][2], cnt[20];
  8.  
  9. int main()
  10. {
  11.     freopen("hotel.in", "r", stdin);
  12.     freopen("hotel.out", "w", stdout);
  13.     cin >> t;
  14.  
  15.     while (t--)
  16.     {
  17.         cin >> n;
  18.  
  19.         dp[1][0] = 1;
  20.         dp[1][1] = 1;
  21.         cnt[1] = 9;
  22.         for (int i = 2; i <= 19; i++)
  23.         {
  24.             dp[i][0] = dp[i-1][1] + 9 * dp[i-1][0];
  25.             dp[i][1] = dp[i-1][1] + 8 * dp[i-1][0];
  26.             cnt[i] = dp[i][1] + 8 * dp[i][0];
  27.         }
  28.  
  29.         int len = 1;
  30.         while (n > cnt[len])
  31.             n -= cnt[len++];
  32.  
  33.         int last;
  34.         if (n > dp[len][1])
  35.         {
  36.             n -= dp[len][1];
  37.             for (int i = 2; i < 10; i++)
  38.                 if (n > dp[len][0])
  39.                     n -= dp[len][0];
  40.                 else
  41.                 {
  42.                     last = i;
  43.                     cout << i;
  44.                     break;
  45.                 }
  46.         }
  47.         else
  48.         {
  49.             last = 1;
  50.             cout << 1;
  51.         }
  52.  
  53.         while (len--)
  54.         {
  55.             for (int i = 0; i < 10; i++)
  56.                 if (i == 1)
  57.                 {
  58.                     if (n > dp[len][1])
  59.                         n -= dp[len][1];
  60.                     else
  61.                     {
  62.                         last = 1;
  63.                         cout << 1;
  64.                         break;
  65.                     }
  66.                 }
  67.                 else if (!(last == 1 && i == 3))
  68.                 {
  69.                     if (n > dp[len][0])
  70.                         n -= dp[len][0];
  71.                     else
  72.                     {
  73.                         last = i;
  74.                         cout << i;
  75.                         break;
  76.                     }
  77.                 }
  78.         }
  79.  
  80.         cout << endl;
  81.     }
  82.  
  83.     return 0;
  84. }
Add Comment
Please, Sign In to add comment