Cod sursa(job #467579)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 29 iunie 2010 15:39:51
Problema Caramizi Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

long int c[100001], car[100001];
long int n, m, i, j, k;
long int suma, lim;
long int inaltime;

int main ()
{
    FILE *f = fopen ("caramizi.in","r");
    FILE *g = fopen ("caramizi.out","w");
    fscanf (f,"%d %d", &n, &m);
    for (i=1; i<=n; ++i)
    {
        fscanf (f,"%ld", &c[i]);
        suma += c[i];
    }

    sort (c + 1, c + 1 + n);
    lim = c[1];
    inaltime = n;
    j = 2;
    for (i=1; i<=suma; ++i)
    {
        if (i <= lim)
        {
            if (i == lim && i > c[1])
                inaltime --;
            if (suma >= inaltime * i)
                car[i] = max (car[i-1], inaltime * i);
            else
                car[i] = suma;
        }
        else
        {
            car[i] = car[i-1];
           // inaltime --;
            lim += c[j];
            j ++;
        }
        if (i == c[1])
            inaltime --;
    }

    /*for (i=1; i<=suma; ++i)
        printf ("%d : %d\n", i, car[i]);*/

    for (i=1; i<=m; ++i)
    {
        fscanf (f,"%ld", &j);
        if (j > suma)
            fprintf (g,"%ld\n", car[suma]);
        else
           fprintf (g,"%ld\n", car[j]);
    }

    fclose(g);
    fclose(f);
    return 0;
}