Cod sursa(job #541730)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 25 februarie 2011 13:40:49
Problema Light2 Scor 20
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 1 Marime 1.11 kb
#include <fstream>
#include <queue>
#define nmax 25

using namespace std;

ifstream in("light2.in");
ofstream out("light2.out");

long long D[nmax];
int V[nmax];
short K;
bool unu;

class cmp
{
    public:
    inline bool operator()(short a,short b){return D[a]>D[b];}
};


priority_queue<int,vector<int> ,cmp>H;

long long calculeaza(long long N)
{
    short i;
    //initializare
    for(i=1;i<=K;i++)if(V[i]>0)D[i]=V[i],H.push(i);
    if(H.empty())return 0;
    long long nr=0,n_bec=0,nr_ant=0,p;
    bool aprins=0;
    while(1)
    {
        p=H.top();
        H.pop();
        nr=D[p];
        if(nr>N)    return n_bec;;
        D[p]+=V[p];
        H.push(p);
        if(nr_ant==nr&&aprins)
            --n_bec,aprins=0;
        else if(nr_ant==nr&&!aprins)
            ++n_bec,aprins=1;
        else ++n_bec,aprins=1;
        nr_ant=nr;
    }
}

int main()
{
    long long N;
    int i,j;
    in>>N>>K;
    for(i=1;i<=K;i++)
    {
        in>>V[i];
        for(j=i-1;j;--j)
            if(V[j]==V[i])V[j]=-1,V[i]=-1;

    }
    out<<calculeaza(N);
    return 0;
}