Submission #348833

#TimeUsernameProblemLanguageResultExecution timeMemory
348833JovanK26Poklon (COCI17_poklon7)C++14
114 / 120
458 ms126804 KiB
#include <bits/stdc++.h>

using namespace std;
int n,m;
int f[2000010];
int maks[2000010];
vector<int> v[2000010];
void dfs(int node,int dep)
{
    if(node>=n)
    {
        maks[dep]=max(maks[dep],f[node]);
    }
    else
    {
        dfs(v[node][0],dep+1);
        dfs(v[node][1],dep+1);
    }
}
int main()
{
    memset(maks,-1,sizeof(maks));
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int a,b;
    cin >> n;
    m=n;
    for(int i=0;i<n;i++)
    {
        cin >> a >> b;
        if(a>0)
        {
            v[i].push_back(a-1);
        }
        else
        {
            f[m]=-a;
            v[i].push_back(m);
            m++;
        }
        if(b>0)
        {
            v[i].push_back(b-1);
        }
        else
        {
            f[m]=-b;
            v[i].push_back(m);
            m++;
        }
    }
    dfs(0,0);
    int rez=-1;
    int rezdep=-1;
    for(int i=0;i<n;i++)
    {
       if(maks[i]==-1)continue;
       bool check=0;
       if(rez==-1)
       {
           check=1;
       }
       else
       {
           int q=(rez+maks[i]-1)/maks[i];
           int pow2=1;
           for(int j=0;j<i-rezdep;j++)
           {
               pow2*=2;
               if(q<=pow2)
               {
                   check=1;
                   break;
               }
           }
       }
       if(check)
       {
           rez=maks[i];
           rezdep=i;
       }
    }
    vector<int> ans;
    for(int i=0;i<rezdep;i++)
    {
        ans.push_back(0);
    }
    while(rez)
    {
        ans.push_back(rez&1);
        rez/=2;
    }
    reverse(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++)
    {
        cout << ans[i];
    }
    return 0;
}

Compilation message (stderr)

poklon.cpp: In function 'int main()':
poklon.cpp:95:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for(int i=0;i<ans.size();i++)
      |                 ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...