Submission #1205121

#TimeUsernameProblemLanguageResultExecution timeMemory
1205121simona1230Dungeons Game (IOI21_dungeons)C++20
Compilation error
0 ms0 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn=5*1e5+5;
const int logg=30;
int n;
vector<int> s,p,w,l,h;
vector<long long> v;
long long sum[maxn][32];
int ver[maxn][32];

void construct(long long x)
{
    for(int i=0; i<n; i++)
    {
        if(x>s[i])
        {
            ver[i][0]=w[i];
            sum[i][0]=s[i];
        }
        else
        {
            ver[i][0]=l[i];
            sum[i][0]=p[i];
        }
    }
    ver[n][0]=n;

    for(int j=1; j<=logg; j++)
        for(int i=0; i<=n; i++)
        {
            sum[i][j]=sum[i][j-1]+sum[ver[i][j-1]][j-1];
            if(1e18-sum[i][j-1]<sum[ver[i][j-1]][j-1])sum[i][j]=1e18;
            ver[i][j]=ver[ver[i][j-1]][j-1];
            //cout<<ver[i][j][num]<<" "<<i<<" "<<(1<<j)<<endl;
        }
}

void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L)
{
    n=N;
    s=S;
    p=P;
    w=W;
    l=L;

    h=s;
    sort(h.begin(),h.end());
    v= {h[0]};
    for(int i=1; i<h.size(); i++)
        if(h[i]!=h[i-1])v.push_back(h[i]);
    v.push_back(1e18);
    return;
}

long long simulate(int x, int zz)
{
    long long z=zz;
    int num=0;
    while(num<v.size()&&z>=v[num])num++;
    num=min(num,v.size()-1);
    construct(v[num]);
    int in=0;

    while(num<v.size())
    {
        in++;
        //cout<<x<<" "<<z<<" "<<v[num]<<endl;
        for(int j=logg;j>=0;j--)
        {
            if(z+sum[x][j]<v[num])
            {
                z+=sum[x][j];
                x=ver[x][j];
            }
        }
        if(x==n)return z;
        if(in>10)return 0;
        z+=sum[x][0];
        x=ver[x][0];
        if(x==n)return z;
        while(num<v.size()&&z>=v[num])num++;
        num=min(num,v.size()-1);
        construct(v[num]);
    }

    return z;
}

Compilation message (stderr)

dungeons.cpp: In function 'long long int simulate(int, int)':
dungeons.cpp:61:12: error: no matching function for call to 'min(int&, std::vector<long long int>::size_type)'
   61 |     num=min(num,v.size()-1);
      |         ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:61:12: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'})
   61 |     num=min(num,v.size()-1);
      |         ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:61:12: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'})
   61 |     num=min(num,v.size()-1);
      |         ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:61:12: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   61 |     num=min(num,v.size()-1);
      |         ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:61:12: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   61 |     num=min(num,v.size()-1);
      |         ~~~^~~~~~~~~~~~~~~~
dungeons.cpp:83:16: error: no matching function for call to 'min(int&, std::vector<long long int>::size_type)'
   83 |         num=min(num,v.size()-1);
      |             ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:83:16: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'})
   83 |         num=min(num,v.size()-1);
      |             ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:60,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:83:16: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'})
   83 |         num=min(num,v.size()-1);
      |             ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:83:16: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   83 |         num=min(num,v.size()-1);
      |             ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:62,
                 from dungeons.h:1,
                 from dungeons.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:
dungeons.cpp:83:16: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   83 |         num=min(num,v.size()-1);
      |             ~~~^~~~~~~~~~~~~~~~