Cod sursa(job #2217159)

Utilizator Constantin.Dragancea Constantin Constantin. Data 29 iunie 2018 13:25:32
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
int n, l;
map <pair<int,int>, int > M[2];
bool u;

int main(){
    ifstream cin ("oite.in");
    ofstream cout ("oite.out");
    cin >> n >> l;
    M[1][{0, 0}] = 1;
    for (int i=1, x; i<=n; i++, u = !u){
        cin >> x;
        for (auto it: M[!u]) M[u][{it.fi.fi, it.fi.se}] = it.se;
        for (auto it: M[!u]){
            if (it.fi.se > 3 || !it.se || it.fi.fi + x > l) continue;
            //cout << it.fi.fi << " " << it.fi.se << " " << it.se << "\n";
            M[u][{it.fi.fi + x, it.fi.se + 1}] = M[!u][{it.fi.fi + x, it.fi.se + 1}] + it.se;
        }
        //for (auto it: M[u]) cout << it.fi.fi << " " << it.fi.se << " " << it.se << "\n";
        //cout << "\n";
    }
    cout << M[!u][{l, 4}];
    return 0;
}