제출 #1258230

#제출 시각아이디문제언어결과실행 시간메모리
1258230mkkkkkkkk축제 (IOI25_festival)C++20
5 / 100
41 ms5688 KiB
#include "festival.h"
#include <bits/stdc++.h>

using namespace std;

std::vector<int> max_coupons(int A, std::vector<int> P, std::vector<int> T)
{
    vector<pair<int,int>> vec1,vec2;
    for(int i=0;i<P.size();i++)
    {
        if(T[i]==1)
        vec1.push_back({P[i],i});
        else
        vec2.push_back({P[i],i});
    }
    vector<int> res;
        bool pos=false;
        int i=0,j=0;
        long long br=A;
        long long n=P.size();
        sort(vec2.begin(),vec2.end());
        sort(vec1.begin(),vec1.end());
        for(;j<vec2.size();j++)
        {
            if((long long)br-vec2[j].first>=(long long)1000000000*n/2)
            {
                pos=true;
                break;
            }
            else if(br-vec2[j].first>=br/2)
            {
                res.push_back(vec2[j].second);
                    br=(br-vec2[j].first)*2;
            }
            else
                break;

        }

        
            for(;i<vec1.size() || j<vec2.size();)
            {
                if(i==vec1.size())
                {
                    if(br<vec2[j].first)
                        break;
                    else
                    {
                        br=(br-vec2[j].first)*2;
                        res.push_back(vec2[j].second);
                        j++;
                    }
                }
                else if(j==vec2.size())
                {
                    if(br<vec1[i].first)
                        break;
                    else
                    {
                        br-=vec1[i].first;
                        res.push_back(vec1[i].second);
                        i++;
                    }

                }
                else
                {
                    if(br<vec1[i].first && br<vec2[j].first)
                        break;

                    int br1=br-vec1[i].first;
                    int br2=(br-vec2[j].first)*2;

                    if(br1>br2)
                    {
                        res.push_back(vec1[i].second);
                        i++;
                    }
                    else
                    {
                        res.push_back(vec2[j].second);
                        j++;
                    }


                }
            }
        

  return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...