Submission #1292927

#TimeUsernameProblemLanguageResultExecution timeMemory
1292927olympolympBank (IZhO14_bank)C++20
71 / 100
1097 ms33228 KiB
#include <bits/stdc++.h>

#define int long long
#define pb push_back

using namespace std;

map<pair<int, int>, bool> mac; 
int cimbom, gs;
vector<int> icardi;
vector<int> osimhen;
vector<int> gsPuan; 

bool bul(int icardiIdx, int fener) {
    if (icardiIdx == cimbom) return true;
    
    if (mac.count({icardiIdx, fener})) return mac[{icardiIdx, fener}];

    int kullanılmısDegil = ((1 << gs) - 1) ^ fener;
    
    int hedef = icardi[icardiIdx];
    
    for (int subMask = kullanılmısDegil; ; subMask = (subMask - 1) & kullanılmısDegil) {
        
        if (gsPuan[subMask] == hedef) {
            
            if (bul(icardiIdx + 1, fener | subMask)) {
                return mac[{icardiIdx, fener}] = true;
            }
        }
        
        if (subMask == 0) break;
    }
    
    return mac[{icardiIdx, fener}] = false;
}

void solve() {
    if (scanf("%lld %lld", &cimbom, &gs) != 2) return;

    icardi.assign(cimbom, 0);
    for (int i = 0; i < cimbom; i++) scanf("%lld", &icardi[i]);

    osimhen.assign(gs, 0);
    for (int i = 0; i < gs; i++) scanf("%lld", &osimhen[i]);

    gsPuan.assign(1 << gs, 0);
    for (int mask = 0; mask < (1 << gs); mask++) {
        for (int j = 0; j < gs; j++) {
            if (mask & (1 << j)) {
                gsPuan[mask] += osimhen[j];
            }
        }
    }
    
    if (bul(0, 0)) {
        printf("YES\n");
    } else {
        printf("NO\n");
    }
}

signed main() {
    solve();
    return 0;
}

Compilation message (stderr)

bank.cpp: In function 'void solve()':
bank.cpp:42:43: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |     for (int i = 0; i < cimbom; i++) scanf("%lld", &icardi[i]);
      |                                      ~~~~~^~~~~~~~~~~~~~~~~~~~
bank.cpp:45:39: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |     for (int i = 0; i < gs; i++) scanf("%lld", &osimhen[i]);
      |                                  ~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...