Facebook
From Walloping Crocodile, 1 Year ago, written in C++.
Embed
Download Paste or View Raw
Hits: 139
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define pb push_back
  5. #define mp make_pair
  6. #define pii pair<int, int>
  7. #define pll pair<ll, ll>
  8. #define all(x) (x).begin(), (x).end()
  9. #define fi first
  10. #define se second
  11. const int nmax = 100005;
  12. int n, nr, k, P, m, mlc;
  13. char *p, a[nmax], s[nmax];
  14. int e(), t(), f();
  15.  
  16. int main() {
  17.         cin.sync_with_stdio(false);
  18.         cin >> a;
  19.         n = strlen(a);
  20.  
  21.         cin >> P >> m;
  22.  
  23.         for (int i = 0; i < n; i++) {
  24.                 if (a[i] == 'x'){
  25.                         s[i] = '0';
  26.                 }
  27.                 else{
  28.                         s[i] = a[i];
  29.                 }
  30.         }
  31.         p = s;
  32.         nr = e();
  33.         for (int i = 0; i < n; i++) {
  34.                 if (a[i] == 'x')
  35.                         s[i] = '1';
  36.                 else
  37.                         s[i] = a[i];
  38.         }
  39.  
  40.         p = s;
  41.         k = (e() - nr + m) % m;
  42.  
  43.         mlc = (P - nr % m + m) % m;
  44.  
  45.         for (int i = 1; i <= m; i++)
  46.                 if ((1LL * k * i) % m == mlc) {
  47.                         cout << i;
  48.                         return 0;
  49.                 }
  50.  
  51.         return 0;
  52. }
  53.  
  54. int e() {
  55.         int r = t();
  56.         while (*p == '+' || *p == '-') {
  57.                 if (*p == '+')
  58.                         p++, r = (r + t()) % m;
  59.                 else
  60.                         p++, r = (r - t() + m) % m;
  61.         }
  62.  
  63.         return r;
  64. }
  65.  
  66. int t() {
  67.         int r = f();
  68.  
  69.         while (*p == '*') {
  70.                 p++, r = (1LL * r * f()) % m;
  71.         }
  72.  
  73.         return r;
  74. }
  75.  
  76. int f() {
  77.         int r = 0;
  78.         if (*p == '(') {
  79.                 p++;
  80.                 r = e();
  81.                 p++;
  82.                 return r;
  83.         }
  84.         while (*p >= '0' && *p <= '9') {
  85.                 r = (r * 10 + *p - '0') % m, p++;
  86.         }
  87.         return r;
  88. }