From 403795b390b108952ec2bc032061c07ff9de62b0 Mon Sep 17 00:00:00 2001 From: lamyinia <142591822+lamyinia@users.noreply.github.com> Date: Fri, 28 Feb 2025 12:34:29 +0800 Subject: [PATCH] 20250228_cf1267k_lyxxys.cpp --- .../personal_submission/cf1267k_lyxxys.cpp | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 daily_problems/2025/02/0228/personal_submission/cf1267k_lyxxys.cpp diff --git a/daily_problems/2025/02/0228/personal_submission/cf1267k_lyxxys.cpp b/daily_problems/2025/02/0228/personal_submission/cf1267k_lyxxys.cpp new file mode 100644 index 0000000000..5d808412eb --- /dev/null +++ b/daily_problems/2025/02/0228/personal_submission/cf1267k_lyxxys.cpp @@ -0,0 +1,55 @@ +void solve(){ + vector cnts(20), fact(21, 1); + for (int i = 1; i < 21; ++ i){ + fact[i] = fact[i-1] * i; + } + + int t; + cin >> t; + while (t--){ + fill(cnts.begin(), cnts.end(), 0); + + i64 k; + cin >> k; + i64 u = k, dv = 2; + vector A; + while (u){ + A.push_back(u%dv), u /= dv; + dv += 1; + } + for (auto &x : A){ + cnts[x] += 1; + } + for (int i = 1; i < 20; ++ i){ + cnts[i] += cnts[i-1]; + } + + int l = A.size(); + i64 ans1 = 1, ans2 = 0; + for (int i = 0; i < l; ++ i){ + int bound = i+1; + ans1 *= cnts[bound]-i; + } + for (int i = 0; i < 20; ++ i){ + int v = !i ? cnts[i] : cnts[i]-cnts[i-1]; + ans1 /= fact[v]; + } + + if (cnts[0]){ + for (int i = 0; i < 20; ++ i){ + cnts[i] -= 1; + } + ans2 = 1; + for (int i = 0; i < l-1; ++ i){ + int bound = i+1; + ans2 *= cnts[bound]-i; + } + for (int i = 0; i < 20; ++ i){ + int v = !i ? cnts[i] : cnts[i]-cnts[i-1]; + ans2 /= fact[v]; + } + } + + cout << ans1-ans2-1 << "\n"; + } +}