diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2026-07-06 19:08:08 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2026-07-06 19:08:08 +0200 |
| commit | 96254947699986c59f0dc63d69fd4b76bd3ed43e (patch) | |
| tree | 6c4dca945d7f7427c48be234d827fe4d33be02c5 /10_advanced_techniques | |
| download | cses-96254947699986c59f0dc63d69fd4b76bd3ed43e.tar.gz cses-96254947699986c59f0dc63d69fd4b76bd3ed43e.zip | |
Initial commit
Diffstat (limited to '')
| -rwxr-xr-x | 10_advanced_techniques/a.out | bin | 0 -> 25000 bytes | |||
| -rw-r--r-- | 10_advanced_techniques/hamming_distance_2136.cpp | 22 | ||||
| -rw-r--r-- | 10_advanced_techniques/meet_in_the_middle_1628.cpp | 42 |
3 files changed, 64 insertions, 0 deletions
diff --git a/10_advanced_techniques/a.out b/10_advanced_techniques/a.out new file mode 100755 index 0000000..54ec8d4 --- /dev/null +++ b/10_advanced_techniques/a.out | |||
| Binary files differ | |||
diff --git a/10_advanced_techniques/hamming_distance_2136.cpp b/10_advanced_techniques/hamming_distance_2136.cpp new file mode 100644 index 0000000..a4b0b7d --- /dev/null +++ b/10_advanced_techniques/hamming_distance_2136.cpp | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | #include <algorithm> | ||
| 2 | #include <bit> | ||
| 3 | #include <iostream> | ||
| 4 | #include <vector> | ||
| 5 | |||
| 6 | int main() { | ||
| 7 | unsigned n, k; | ||
| 8 | std::cin >> n >> k; | ||
| 9 | std::vector<unsigned> a(n); | ||
| 10 | for (unsigned i = 0; i < n; i++) { | ||
| 11 | for (unsigned j = 0, p = 1; j < k; j++, p <<= 1) { | ||
| 12 | char c; | ||
| 13 | std::cin >> c; | ||
| 14 | if (c == '1') a[i] += p; | ||
| 15 | } | ||
| 16 | } | ||
| 17 | int s = k+1; | ||
| 18 | for (unsigned i = 0; i < n; i++) | ||
| 19 | for (unsigned j = i+1; j < n; j++) | ||
| 20 | s = std::min(s, std::popcount(a[i] ^ a[j])); | ||
| 21 | std::cout << s << "\n"; | ||
| 22 | } | ||
diff --git a/10_advanced_techniques/meet_in_the_middle_1628.cpp b/10_advanced_techniques/meet_in_the_middle_1628.cpp new file mode 100644 index 0000000..a38c5d4 --- /dev/null +++ b/10_advanced_techniques/meet_in_the_middle_1628.cpp | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | #include <algorithm> | ||
| 2 | #include <iostream> | ||
| 3 | #include <numeric> | ||
| 4 | #include <unordered_map> | ||
| 5 | #include <vector> | ||
| 6 | |||
| 7 | void add_to_map(size_t i, size_t e, long long s, | ||
| 8 | const std::vector<long long>& a, | ||
| 9 | std::unordered_map<long long, long long>& m) { | ||
| 10 | if (i == e) { m[s]++; return; } | ||
| 11 | add_to_map(i+1, e, s, a, m); | ||
| 12 | add_to_map(i+1, e, s+a[i], a, m); | ||
| 13 | } | ||
| 14 | |||
| 15 | long long f(size_t i, size_t e, long long t, long long s, | ||
| 16 | const std::vector<long long>& a, | ||
| 17 | const std::unordered_map<long long, long long>& m) { | ||
| 18 | if (t < 0 || t > s) return 0; | ||
| 19 | if (i == e) return m.find(t) == m.end() ? 0 : m.at(t); | ||
| 20 | return f(i+1, e, t, s-a[i], a, m) + f(i+1, e, t-a[i], s-a[i], a, m); | ||
| 21 | } | ||
| 22 | |||
| 23 | int main() { | ||
| 24 | size_t n, p; | ||
| 25 | long long x, s{0}; | ||
| 26 | std::cin >> n >> x; | ||
| 27 | std::vector<long long> a(n); | ||
| 28 | for (size_t i = 0; i < n; i++) | ||
| 29 | std::cin >> a[i]; | ||
| 30 | |||
| 31 | std::sort(a.begin(), a.end(), std::greater<long long>()); | ||
| 32 | s = std::accumulate(a.begin(), a.end(), 0LL); | ||
| 33 | if (x > s) { | ||
| 34 | std::cout << "0\n"; | ||
| 35 | return 0; | ||
| 36 | } | ||
| 37 | |||
| 38 | p = a.size()/2; | ||
| 39 | std::unordered_map<long long, long long> m; | ||
| 40 | add_to_map(p, a.size(), 0, a, m); | ||
| 41 | std::cout << f(0, p, x, s, a, m) << "\n"; | ||
| 42 | } | ||
