Cod sursa(job #1372313)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 4 martie 2015 12:48:13
Problema Caramizi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
#include<algorithm>
#define N 1000005
#define M 200005
long long din[N],inalt[N];
int v[M];
int main()
{
    FILE *fin,*fout;
    fin=fopen("caramizi.in","r");
    fout=fopen("caramizi.out","w");
    int n,m;
    fscanf(fin,"%d%d",&n,&m);
    long long i,j;
    for(i=1;i<=n;i++)
        fscanf(fin,"%lld",&v[i]);
    v[0]=1;
    v[n+1]=N;
    std::sort(v+1,v+n+1);
    int sum=-1;
    for(i=0;i<=n;i++)
    {
        sum+=v[i];
        for(j=v[i];j<v[i+1];j++)
        {
            din[j]=sum-sum%j+(n-i)*j;
            if(din[j]<din[j-1])
                din[j]=din[j-1];
        }
    }
    i=sum/v[n];
    while(i){
        inalt[i]=inalt[i+1];
        if(sum-sum%i>inalt[i])
            inalt[i]=sum-sum%i;
        i--;
    }
    for(i=0;i<m;i++)
    {
        int x;
        fscanf(fin,"%d",&x);
        if(x<N)
            fprintf(fout,"%lld\n",din[x]);
        else
            fprintf(fout,"%lld\n",inalt[sum/x+1]);
    }
    return 0;
}