Submission #831450

#TimeUsernameProblemLanguageResultExecution timeMemory
831450KaitokidPrisoner Challenge (IOI22_prison)C++17
90 / 100
65 ms1464 KiB
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    vector<vector<int> > res;
    vector<int>op;
    vector<int>to;
    void go(int x,int l,int r,int ll,int rr,int u)
    {
        res[x][0]=u;
        for(int i=ll;i<=l;i++)res[x][i]=-u-1;
        for(int i=r;i<=rr;i++)res[x][i]=u-2;
        if(r<l+2)return;
        int len=r-l-1;
        int ln1=(len+op[len+2]-1)/op[len+2],ln2=len/op[len+2],cn1=len%op[len+2];
        int cn2=op[len+2]-cn1;
        int lst=to[x];
        int st=l+1;
        for(int i=0;i<cn1;i++)
        {
            for(int j=st;j<st+ln1;j++)res[x][j]=lst;
            go(lst,st,st+ln1-1,l,r,1-u);
            st+=ln1;
            lst++;
        }

        for(int i=0;i<cn2;i++)
        {
            for(int j=st;j<st+ln2;j++)res[x][j]=lst;
            go(lst,st,st+ln1-1,l,r,1-u);
            lst++;
            st+=ln2;
         }

    }
    vector<vector<int> > devise_strategy(int N)
    {
        vector<int>dp(N+1),opt(N+1);
        dp[1]=0;
        dp[2]=0;
        for(int i=3;i<=N;i++)
        {
            dp[i]=1000000;
            for(int j=1;j<=i-2;j++)
            {
                int h=(i-2+j-1)/j,d=(i-2)/j,r=(i-2)%j;
                int g=j-r;
                int res=j+dp[h];
                if(res<dp[i]){dp[i]=res;opt[i]=j;}
            }
        }
        //cout<<dp[N]<<endl;
        to.clear();
        vector<int>g;
        g.push_back(N);
        int num=1;
        while(!g.empty())
        {
          int h=to.size()+num;
          for(int i=0;i<num;i++)to.push_back(h);
          vector<int>gg;
          int f=0;
          for(auto u:g)
                {   f=max(f,opt[u]);
                    if(opt[u]!=0)
                    {gg.push_back((u-2)/opt[u]);gg.push_back(((u-2)+opt[u]-1)/opt[u]);}}
                    g=gg;
                    num=f;
        }
        //cout<<to.size()<<endl;
        res=vector<vector<int> >(to.size(),vector<int>(N+1));
        op=opt;
        go(0,1,N,1,N,0);
        return res;

    }


  /*  int main()
    {

    vector<vector<int> > v=devise_strategy(20);
    cout<<v.size()<<endl;

    for(int i=0;i<v.size();i++)
    {
        for(int j=0;j<v[i].size();j++)cout<<v[i][j]<<" ";
        cout<<endl;
    }

        return 0;
    }
*/

Compilation message (stderr)

prison.cpp: In function 'std::vector<std::vector<int> > devise_strategy(int)':
prison.cpp:45:35: warning: unused variable 'd' [-Wunused-variable]
   45 |                 int h=(i-2+j-1)/j,d=(i-2)/j,r=(i-2)%j;
      |                                   ^
prison.cpp:46:21: warning: unused variable 'g' [-Wunused-variable]
   46 |                 int g=j-r;
      |                     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...