Cod sursa(job #1362507)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 26 februarie 2015 13:06:27
Problema Branza Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<deque>

int main()
{
    FILE *fin,*fout;
    fin=fopen("branza.in","r");
    fout=fopen("branza.out","w");

    int n,s,t;
    long long int costT=0;
    fscanf(fin,"%d %d %d",&n,&s,&t);

    std::deque<int> cm;
    std::deque<int> pos;

    int cost[n],cant[n];

    for(int i=1;i<=n;i++)
    {
        fscanf(fin,"%d %d",&cost[i],&cant[i]);
    }

    for(int i=1;i<=n;i++)
    {
        if(!pos.empty()&&pos.front()<=i-t)
        {
            pos.pop_front();
            cm.pop_front();
        }

        while(!cm.empty()&&cant[i]*cost[i]<cm.back()*cant[i]+s*(i-pos.back())*cant[i])
        {
            pos.pop_back();
            cm.pop_back();
        }

        pos.push_back(i);
        cm.push_back(cost[i]);

        if(pos.front()==i)
        {
            costT+=(cm.front()*cant[i]);
        }
        else
        {
            costT+=(cm.front()*cant[i]+s*cant[i]*(i-pos.front()));
        }
    }
    fprintf(fout,"%lld",costT);
}