Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define debug(x) cout << #x << " = " << x << endl
  4. #define fori(i, ini, lim) for(int i = int(ini); i < int(lim); i++)
  5. #define ford(i, ini, lim) for(int i = int(ini); i >= int(lim); i--)
  6.  
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10. typedef pair<int, int> ii;
  11.  
  12. const int MOD = 10000;
  13. int A, B, N, K;
  14.  
  15. inline int add(int a, int b) {
  16.     a += b;
  17.     if(a >= MOD) {
  18.         a -= MOD;
  19.     }
  20.     return a;
  21. }
  22.  
  23. inline int mult(int a, int b) {
  24.     return (1LL * a * b) % MOD;
  25. }
  26.  
  27. inline int sub(int a, int b) {
  28.     a -= b;
  29.     if(0 > a) {
  30.         a += MOD;
  31.     }
  32.     return a;
  33. }
  34.  
  35. ii operator * (const ii &lhs, const ii &rhs) {
  36.     ii ret = ii(add(mult(B, mult(lhs.second, rhs.second)), mult(lhs.first, rhs.first)), add(mult(lhs.first, rhs.second), mult(lhs.second, rhs.first)));
  37.     return ret;
  38. }
  39.  
  40. ii f_exp(ii p, int exp) {
  41.     if(exp == 0) {
  42.         return ii(1, 0);
  43.     }
  44.     else if(exp & 1) {
  45.         return p * f_exp(p, exp - 1);
  46.     }
  47.     return f_exp(p * p, exp >> 1);
  48. }
  49.  
  50. int main() {
  51.     ios_base::sync_with_stdio(false);
  52.  
  53.     cin >> A >> B >> N >> K;
  54.  
  55.     ii p = f_exp(ii(A, 1), N);
  56.     int a = p.first;
  57.     a = mult(a, 2);
  58.  
  59.     if(N & 1) {
  60.         if(A > sqrt(B)) {
  61.             a = sub(a, 1);
  62.         }
  63.     }
  64.     else {
  65.         if(A * A != B) {
  66.             a = sub(a, 1);
  67.         }
  68.     }
  69.  
  70.     string num = to_string(a);
  71.     while(num.size() < 4) {
  72.         num = "0" + num;
  73.     }
  74.     reverse(num.begin(), num.end());
  75.     cout << num[K - 1] << '\n';
  76.  
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement