Cod sursa(job #2959060)

Utilizator cattyAninisCatrinel catty Data 29 decembrie 2022 18:58:15
Problema Energii Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
short n,w,i,x,y;
bool ok;
int cm=INT_MAX;
struct c
{
    short a;
    int b;
};
queue <c> q,q1;
int main()
{
    in>>n>>w;
    for(i=1; i<=n; ++i)
    {
        in>>x>>y;
        if(x==w)
            cm=min(cm,int(y));
        else if(x<w)
        {
            if(ok==0)
            {
                while(!q.empty())
                {

                    short z=q.front().a+x;
                    int v=q.front().b+y;
                    q1.push({z-x,v-y});
                    if(z<w)
                        q1.push({z,v});
                    else if(z>=w)
                        cm=min(cm,v);
                    q.pop();
                }
                q1.push({x,y});
                ok=1;
            }
            else
            {
                while(!q1.empty())
                {

                    short z=q1.front().a+x;
                    int v=q1.front().b+y;
                    q.push({z-x,v-y});
                    if(z<w)
                        q.push({z,v});
                    else if(z>=w)
                        cm=min(cm,v);
                    q1.pop();
                }
                q.push({x,y});
                ok=0;
            }
        }
    }
    if(cm<2000000000)
    out<<cm;
    else out<<-1;
}