525E - Anya and Cubes - CodeForces Solution


binary search bitmasks brute force dp math meet-in-the-middle *2100

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int N = 105;

ll n, k, S;
ll factorial[19];



void solve(int idx, ll sum, int ex, vector<int> &v,  map<ll, vector<int>> &m) {
    if (idx == v.size()) return void(m[sum].push_back(ex));
    
    solve(idx + 1, sum, ex, v, m);
    solve(idx + 1, sum + v[idx], ex, v, m);
    if (v[idx] < 19 && sum + factorial[v[idx]] <= S)
        solve(idx + 1, sum + factorial[v[idx]], ex + 1, v, m);
}


int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    
    cin >> n >> k >> S;
    vector<int> a(n); 
    for (int i = 0; i < n; i++) cin >> a[i];
    vector<int> v1(a.begin(), a.begin() + n/2), v2(a.begin() + n/2, a.end());
    
    factorial[0] = 1;
    for (int i = 1; i < 19; i++) 
        factorial[i] = factorial[i - 1] * i;
        
    map<ll, vector<int>> m1, m2; // map for finding the elements with the number of ! with it.
    
    solve(0, 0, 0, v1, m1);
    solve(0, 0, 0, v2, m2);
    m1[0] = {0};
    m2[0] = {0};
    
    for (auto u : m2) 
        sort(m2[u.first].begin(), m2[u.first].end()); 
    
    ll ans = 0;
    for (auto u : m1) {
        ll target = S - u.first;
        if (m2.find(target) != m2.end()) {
            for (auto l : m1[u.first]) {
                auto it = upper_bound(m2[target].begin(), m2[target].end(), k - l);
                ans += it - m2[target].begin(); 
            }
        }
    }
    //here
    cout << ans << "\n";
    
    return 0;
}
 				 	 	  			  		 								  		


Comments

Submit
0 Comments
More Questions

1516B - AGAGA XOOORRR
1515A - Phoenix and Gold
1515B - Phoenix and Puzzle
155A - I_love_username
49A - Sleuth
1541A - Pretty Permutations
1632C - Strange Test
673A - Bear and Game
276A - Lunch Rush
1205A - Almost Equal
1020B - Badge
1353A - Most Unstable Array
770A - New Password
1646B - Quality vs Quantity
80A - Panoramix's Prediction
1354B - Ternary String
122B - Lucky Substring
266B - Queue at the School
1490A - Dense Array
1650B - DIV + MOD
1549B - Gregor and the Pawn Game
553A - Kyoya and Colored Balls
1364A - XXXXX
1499B - Binary Removals
1569C - Jury Meeting
108A - Palindromic Times
46A - Ball Game
114A - Cifera
776A - A Serial Killer
25B - Phone numbers