Cod sursa(job #2332336)

Utilizator stefan1anubystefan popa stefan1anuby Data 30 ianuarie 2019 17:26:14
Problema Zebughil Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
vector < pair < long long, long long  > > vec;
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
long long a[25],v[25];
void reset(int n)
{
    int i;
    for(i=1; i<=n; i++)
        a[i]=0;
}
void afis(int n)
{
    int i;
    for(i=1; i<=n; i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
int cauta(int n)
{
    int i,sum=0;
    for(i=1; i<=n; i++)
        if(a[i]==1)
            sum+=v[i];
    return sum;
}
void solve()
{
    long long p,n,i,g,nr,cnt,x;
    cin>>n>>g;
    for(i=1; i<=n; i++)
        cin>>v[i];
    p=1<<n;
    a[0]=1;
    i=1;
    while(i<p)
    {
        nr=i;
        cnt=n;
        while(nr!=0)
        {
            a[cnt]=nr%2;
            nr/=2;
            cnt--;
        }
        x=cauta(n);
        if(x<=g)
            vec.push_back({x,i});
        //cout<<x<<" "<<i<<" ";
        //afis(n);
        reset(n);
        i++;
    }
    sort(vec.begin(),vec.end());
    cnt=vec.size()-1;
    cnt=vec[cnt].second;
    long long sol=0;
    for(i=vec.size()-1; i>=0; i--)
    {
        nr=cnt&i;
        if(nr==0)
        {
            cnt=cnt | i;
            sol++;
        }
    }
    cout<<sol<<'\n';
    while(vec.empty()==false)
        vec.pop_back();
}
int main()
{
    for(int i=1;i<=3;i++)
    solve();

    return 0;
}