1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #include <bits/stdc++.h>
using namespace std;
const int LEN = 25050;
class BigInt { public: int len_; int arr_[LEN]; int &operator[](int idx) { return arr_[idx]; } BigInt(int x = 0) { memset(arr_, 0, sizeof(arr_)); for (len_ = 1; x; ++len_) { arr_[len_] = x % 10; x /= 10; } --len_; } void flatten(int len) { len_ = len; for (int i = 1; i <= len_; ++i) { if (arr_[i] >= 10) { arr_[i + 1] += arr_[i] / 10; arr_[i] %= 10; } } while (!arr_[len_]) --len_; } void print() { for (int i = max(1, len_); i >= 1; --i) { cout << arr_[i]; } } };
BigInt operator*(BigInt a, int b) { BigInt c; int len = a.len_; for (int i = 1; i <= len; ++i) { c[i] += a[i] * b; } c.flatten(len + 11); return c; }
int cnt(BigInt a, int x) { int ans = 0; for (int i = 1; i <= a.len_; ++i) { if (a[i] == x) ++ans; } return ans; }
int main() { int t, n, x; cin >> t; while (t--) { cin >> n >> x; BigInt a(1); for (int i = 1; i <= n; ++i) { a = a * i; } cout << cnt(a, x) << endl; } return 0; }
|