From 2f49014fefe18fe87bc2ee4206f6a6e891200aa1 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Tue, 6 Aug 2024 11:41:16 +0800 Subject: [PATCH] add cpps --- .gitignore | 4 +- README.md | 4 ++ day4/T435167/T435167.cpp | 53 ++++++++++++++++++++++- day4/U287193/chat.cpp | 66 ++++++++++++++++++++++++++++ day4/U461920/U461920.cpp | 2 + day4/U76034/1.in | 4 ++ day4/U76034/chat.cpp | 92 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 223 insertions(+), 2 deletions(-) create mode 100644 day4/U287193/chat.cpp create mode 100644 day4/U76034/1.in create mode 100644 day4/U76034/chat.cpp diff --git a/.gitignore b/.gitignore index 1b31382..499915a 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,6 @@ day2/U111091/out.txt day2/U111091/fixed day4/T435167/T435167 day4/U461920/U461920 -test.txt \ No newline at end of file +test.txt +day4/U76034/chat +day4/U287193/chat diff --git a/README.md b/README.md index e78c68d..8e232e3 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ int main(){ } ``` +## Day4 +### [T435167 01 Sort](./day4/T435167/T435167.md) +#### 通过异色中转 + # 排序 ## 稳定性 >隔着老远swap一般不稳定 diff --git a/day4/T435167/T435167.cpp b/day4/T435167/T435167.cpp index 3ed6e4e..08a1d2c 100644 --- a/day4/T435167/T435167.cpp +++ b/day4/T435167/T435167.cpp @@ -4,9 +4,22 @@ using namespace std; #define int long long +#ifdef DEBUG +#define PRINT_VALUE(v){cout<<#v<<" :"<> histories; bool checkAllEleGoUp(){ for(int i=2;i<=n;i++){ @@ -17,7 +30,36 @@ bool checkAllEleGoUp(){ return true; } +void sort_fixed(){ + for(int i=1;i<=n;i++){ + int max_num=INT_MIN; + vector max_dirs; + for (int j=i; j<=n; j++) { + if (max_num>t; for(int i=1;i<=t;i++){ bool isAllBZero=true; @@ -40,6 +82,15 @@ signed main(){ cout<<-1< +using namespace std; +const int MOD = 998244353; + +#ifdef DEBUG +#define PRINT_VALUE(v){cout<<#v<<" :"<> n >> m; + vector lim(n); + for (int i = 0; i < n; ++i) { + cin >> lim[i]; + } + + vector> dp(n + 1, vector(m + 1, 0)); + dp[0][0] = 1; + + vector positions; + for (int i = 1; i <= n; ++i) { + if (lim[i - 1] == 0) { + positions.push_back(i); + } + } + + int total_permutations = 1; + for (int i = 1; i <= positions.size(); ++i) { + total_permutations = (total_permutations * i) % MOD; + } + + for (int i = 1; i <= n; ++i) { + if (lim[i - 1] != 0) { + for (int j = 0; j <= m; ++j) { + dp[i][j] = dp[i - 1][j]; + } + } else { + for (int j = 0; j <= m; ++j) { + for (int k = 0; k < i; ++k) { + if (j - k >= 0) { + dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % MOD; + } + } + } + } + } + + int result = 0; + for (int j = 0; j <= m; ++j) { + result = (result + dp[n][j]) % MOD; + } + + result = (result * total_permutations) % MOD; + + cout << result << endl; + + return 0; +} diff --git a/day4/U461920/U461920.cpp b/day4/U461920/U461920.cpp index 7bacc73..25445e4 100644 --- a/day4/U461920/U461920.cpp +++ b/day4/U461920/U461920.cpp @@ -25,6 +25,8 @@ void set_num_times_mem(){ } int main(){ + cin.sync_with_stdio(false); + cin.tie(0); cin>>n; set_num_times_mem(); PRINT_ARRAY(num_times,n); diff --git a/day4/U76034/1.in b/day4/U76034/1.in new file mode 100644 index 0000000..9fd89b4 --- /dev/null +++ b/day4/U76034/1.in @@ -0,0 +1,4 @@ +3 +6 3 +4 2 +1244 1241 \ No newline at end of file diff --git a/day4/U76034/chat.cpp b/day4/U76034/chat.cpp new file mode 100644 index 0000000..18c4afe --- /dev/null +++ b/day4/U76034/chat.cpp @@ -0,0 +1,92 @@ +#include +#include +#include +#include +#define MOD 1000000007 + +using namespace std; + +#ifdef DEBUG +#define PRINT_VALUE(v){cout<<#v<<" :"< 0) { + if (b % 2 == 1) + res = (res * a) % mod; + a = (a * a) % mod; + b /= 2; + } + return res; +} + +map prime_factorization(ll x) { + map factors; + for (ll i = 2; i * i <= x; ++i) { + while (x % i == 0) { + factors[i]++; + x /= i; + } + } + if (x > 1) { + factors[x]++; + } + return factors; +} + +int main() { + ios::sync_with_stdio(false); + cin.tie(0); + + int q; + cin >> q; + vector> queries(q); + + for (int i = 0; i < q; ++i) { + cin >> queries[i].first >> queries[i].second; + } + + const int MAXN = 1e6 + 5; + vector fact(2 * MAXN), invFact(2 * MAXN); + + fact[0] = 1; + for (int i = 1; i < 2 * MAXN; ++i) { + fact[i] = fact[i - 1] * i % MOD; + } + invFact[2 * MAXN - 1] = power(fact[2 * MAXN - 1], MOD - 2, MOD); + for (int i = 2 * MAXN - 2; i >= 0; --i) { + invFact[i] = invFact[i + 1] * (i + 1) % MOD; + } + + auto binomial = [&](ll n, ll k) { + if (n < k) return 0LL; + return fact[n] * invFact[k] % MOD * invFact[n - k] % MOD; + }; + + for (auto [x, n] : queries) { + if (n == 1) { + cout << (x == 1 ? 1 : 2) << '\n'; + continue; + } + + map factors = prime_factorization(x); + ll result = 1; + + for (auto [p, e] : factors) { + result = result * binomial(2 * n + e - 1, e) % MOD; + } + + cout << result << '\n'; + } + + return 0; +}