Submission #1251226

#TimeUsernameProblemLanguageResultExecution timeMemory
1251226bronze_coderFestival (IOI25_festival)C++20
Compilation error
0 ms0 KiB
#include "festival.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> max_coupons(long long A, vector<int> P, vector<int> T){
    int subtask = 3;
    int n = P.size();
    for(int i=0;i<n;i++){
        if(T[i]>2){
            subtask = 5;
        }
    }
    if(n<=70){
        subtask = 4;
    }
    vector<pair<int,int>> l1;
    vector<pair<int,int>> l2;
    vector<pair<int,int>> l3;
    vector<pair<int,int>> l4;
    for(int i=0;i<n;i++){
        if(T[i]==1){
            l1.push_back({P[i],i});
        }
        if(T[i]==2){
            l2.push_back({P[i],i});
        }
        if(T[i]==3){
            l3.push_back({P[i],i});
        }
        if(T[i]==4){
            l4.push_back({P[i],i});
        }
    }
    sort(l1.begin(),l1.end());
    sort(l2.begin(),l2.end());
    sort(l3.begin(),l3.end());
    sort(l4.begin(),l4.end());
    if(subtask==3){
        vector<int> prefix = {0};
        for(int i=0;i<l1.size();i++){
            prefix.push_back(prefix[i]+l1[i].first);
        }
        long long A1 = A;
        int ans = 0;
        for(int i=0;i<=l2.size();i++){
            if(i!=0){
                A -= l2[i-1].first;
                A *= 2;
                A = min(A,1000000000000000);
            }
            int low = 0;
            int high = prefix.size()-1;
            while(low<high){
                int mid = (low+high+1)/2;
                if(prefix[mid]>A){
                    high = mid-1;
                }
                else{
                    low = mid;
                }
            }
            ans = max(ans,i+low);
            if(A<0){
                break;
            }
        }

        A = A1;
        for(int i=0;i<=l2.size();i++){
            if(i!=0){
                A -= l2[i-1].first;
                A *= 2;
                A = min(A,1000000000000000);
            }
            int low = 0;
            int high = prefix.size()-1;
            while(low<high){
                int mid = (low+high+1)/2;
                if(prefix[mid]>A){
                    high = mid-1;
                }
                else{
                    low = mid;
                }
            }
            if(ans==i+low){
                vector<int> answer;
                for(int j=0;j<i;j++){
                    answer.push_back(l2[j].second);
                }
                for(int j=0;j<low;j++){
                    answer.push_back(l1[j].second);
                }
                return answer;
            }
        }
    }
    if(subtask==4){
        vector<pair<int,int>> l;
        for(int i=0;i<n;i++){
            if(T[i]!=1){
                l.push_back({1LL*T[i]*P[i]*(6/(T[i]-1)),i});
            }
        }
        sort(l.begin(),l.end());
        for(int i=0;i<l1.size();i++){
            l.push_back(l1[i]);
        }
        vector<int> ans;
        for(int i=0;i<n;i++){
            ans.push_back(l[i].second);
        }
        long long dp[n+1][n+1];
        int f[n+1][n+1];
        for(int i=0;i<=n;i++){
            for(int j=0;j<=n;j++){
                if(i==0){
                    if(j==0){
                        dp[i][j] = A;
                    }
                    else{
                        dp[i][j] = -1;
                    }
                }
                else{
                    long long x;
                    if(j>=1){
                        x = (dp[i-1][j-1]-P[ans[i-1]])*T[ans[i-1]];
                    } 
                    else{
                        x = -1;
                    }
                    if(x>dp[i-1][j]){
                        dp[i][j] = x;
                        f[i][j] = 1;
                    }
                    else{
                        dp[i][j] = dp[i-1][j];
                        f[i][j] = 0;
                    }
                    dp[i][j] = min(dp[i][j],1000000000000000);
                }
            }
        }

        for(int i=n;i>=0;i--){
            vector<int> answer;
            if(dp[n][i]>=0){
                for(int j=n;j>0;j--){
                    if(f[j][i]){
                        answer.push_back(ans[j-1]);
                        i--;
                    }
                }
                vector<int> answer1;
                for(int j=0;j<answer.size();j++){
                    answer1.push_back(answer[answer.size()-1-j]);
                }
                return answer1;
            }
        }
    }
    if(subtask==5){
        vector<pair<int,int>> l;
        for(int i=0;i<n;i++){
            if(T[i]!=1){
                l.push_back({1LL*T[i]*P[i]*(6/(T[i]-1)),i});
            }
        }
        sort(l.begin(),l.end());
        for(int i=0;i<l1.size();i++){
            l.push_back(l1[i]);
        }
        vector<int> ans;
        for(int i=0;i<n;i++){
            ans.push_back(l[i].second);
        }
        return ans;
    }
}

Compilation message (stderr)

festival.cpp: In function 'std::vector<int> max_coupons(long long int, std::vector<int>, std::vector<int>)':
festival.cpp:49:24: error: no matching function for call to 'min(long long int&, long int)'
   49 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
festival.cpp:49:24: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long int')
   49 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
festival.cpp:49:24: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long int')
   49 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3449:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3449 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3449:5: note:   template argument deduction/substitution failed:
festival.cpp:49:24: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   49 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3455:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3455:5: note:   template argument deduction/substitution failed:
festival.cpp:49:24: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   49 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
festival.cpp:73:24: error: no matching function for call to 'min(long long int&, long int)'
   73 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
festival.cpp:73:24: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long int')
   73 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
festival.cpp:73:24: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long int')
   73 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3449:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3449 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3449:5: note:   template argument deduction/substitution failed:
festival.cpp:73:24: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   73 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3455:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3455:5: note:   template argument deduction/substitution failed:
festival.cpp:73:24: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   73 |                 A = min(A,1000000000000000);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~
festival.cpp:141:35: error: no matching function for call to 'min(long long int&, long int)'
  141 |                     dp[i][j] = min(dp[i][j],1000000000000000);
      |                                ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
festival.cpp:141:35: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long int')
  141 |                     dp[i][j] = min(dp[i][j],1000000000000000);
      |                                ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
festival.cpp:141:35: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long int')
  141 |                     dp[i][j] = min(dp[i][j],1000000000000000);
      |                                ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3449:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3449 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3449:5: note:   template argument deduction/substitution failed:
festival.cpp:141:35: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  141 |                     dp[i][j] = min(dp[i][j],1000000000000000);
      |                                ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from festival.h:1,
                 from festival.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3455:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3455:5: note:   template argument deduction/substitution failed:
festival.cpp:141:35: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  141 |                     dp[i][j] = min(dp[i][j],1000000000000000);
      |                                ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
festival.cpp:180:1: warning: control reaches end of non-void function [-Wreturn-type]
  180 | }
      | ^