Cod sursa(job #1670011)

Utilizator mateibanuBanu Matei Costin mateibanu Data 31 martie 2016 12:55:43
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <bitset>
#include <string.h>

using namespace std;

FILE*f=fopen("pietre.in","r");
FILE*g=fopen("pietre.out","w");

int v[60001];
int nu[60001];

int main()
{
    int n,i,s,p,u,m;
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++) {fscanf(f,"%d",&v[i]);nu[i]=0;}
    v[n+1]=80001;
    for (i=1;i<=60000;i++)
    {
        s=i;
        p=1;
        u=n;memset(nu,0,sizeof(nu));
        while (s>0)
        {
            while (p<=u)
            {
                m=(p+u)/2;
                if (v[m]<s) p=m+1;
                else u=m-1;

            }
            if (v[p]>s)p--;
            for (;p>=1&&nu[p];p--);
            if (p>0) {s-=v[p];nu[p]=1;}
            else s=-1;
            u=n;
            p=1;
        }
        if (s!=0) {fprintf(g,"%d",i-1);
        break;}
    }
    fclose(g);
    fclose(f);
    return 0;
}