Submission #579690

#TimeUsernameProblemLanguageResultExecution timeMemory
579690wdjpngUplifting Excursion (BOI22_vault)C++17
5 / 100
5067 ms4948 KiB
#include <bits/stdc++.h>

#define int long long
#define rep(i,n) for(int i = 0; i < n; i++)
#define per(i,n) for(int i = n-1; i >=0; i--)

using namespace std;

signed main()
{
    int m,l;
    cin>>m>>l;
    int maxl=(m)*(m+1)/2*50; //TODO change to 100
    if(l>maxl) {cout<<"impossible\n"; exit(0);}
    vector<int>dp(2*maxl+100000, -1);
    dp[maxl]=0;
 
    for(int cl = -m; cl <= m; cl++)
    {
        int a;
        cin>>a;
        rep(whatever,a)
        {
            if(cl>0)
            {
                per(i,2*maxl+1)
                {
                    if(i-cl<0||i-cl>=dp.size()||dp[i-cl]==-1) continue;
                    dp[i]=max(dp[i], dp[i-cl]+1);
                }
            } else
            rep(i,2*maxl+1) 
            {
                if(i-cl<0||i-cl>=dp.size()||dp[i-cl]==-1) continue;
                dp[i]=max(dp[i], dp[i-cl]+1);
            }
        }
    }

    if(l+maxl<dp.size()&&dp[l+maxl]>0) cout<<dp[l+maxl]<<'\n';
    else cout<<"impossible\n";
}

Compilation message (stderr)

vault.cpp: In function 'int main()':
vault.cpp:28:36: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |                     if(i-cl<0||i-cl>=dp.size()||dp[i-cl]==-1) continue;
      |                                ~~~~^~~~~~~~~~~
vault.cpp:34:32: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |                 if(i-cl<0||i-cl>=dp.size()||dp[i-cl]==-1) continue;
      |                            ~~~~^~~~~~~~~~~
vault.cpp:40:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |     if(l+maxl<dp.size()&&dp[l+maxl]>0) cout<<dp[l+maxl]<<'\n';
      |        ~~~~~~^~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...