Submission #111473

#TimeUsernameProblemLanguageResultExecution timeMemory
111473nxteruKoala Game (APIO17_koala)C++14
100 / 100
88 ms512 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double D; typedef pair<int,vector<int>> P; typedef pair<ll,P> T; #define M 1000000007 #define F first #define S second #define PB push_back #define INF 1000000001 int n,b[105],r[105]; void ini(void){ for(int i=0;i<n;i++)b[i]=0; } int minValue(int N, int w) { n=N; ini(); b[0]=1; playRound(b,r); for(int i=0;i<n;i++)if(b[i]>=r[i])return i; } int maxValue(int N,int w) { n=N; vector<int>res; for(int i=0;i<n;i++)res.PB(i); while(res.size()>1){ ini(); for(int i=0;i<res.size();i++)b[res[i]]=w/res.size(); playRound(b,r); res.clear(); for(int i=0;i<n;i++)if(b[i]>0&&b[i]<r[i])res.PB(i); } return res[0]; } int greaterValue(int N, int w) { n=N; ini(); b[0]=4,b[1]=4; playRound(b,r); if(b[0]<r[0]){ if(b[1]>=r[1])return 0; b[0]=7,b[1]=7; playRound(b,r); if(b[0]<r[0]&&b[1]<r[1]){ b[0]=8,b[1]=8; playRound(b,r); } if(b[0]<r[0])return 0; else return 1; }else if(b[1]<r[1])return 1; else{ b[0]=2,b[1]=2; playRound(b,r); if(b[0]>=r[0]&&b[1]>=r[1]){ b[0]=1,b[1]=1; playRound(b,r); } if(b[0]<r[0])return 0; else return 1; } } bool grt(int x,int y){ ini(); b[x]=100,b[y]=100; playRound(b,r); return b[x]>=r[x]; } vector<int> mrg(vector<int>x,vector<int>y){ vector<int>res; int i=0,j=0; while(i<x.size()&&j<y.size()){ if(grt(x[i],y[j]))res.PB(x[i++]); else res.PB(y[j++]); } while(i<x.size())res.PB(x[i++]); while(j<y.size())res.PB(y[j++]); return res; } void allValues(int N, int w, int *p) { n=N; if(w==2*n){ vector<vector<int>>res; for(int i=0;i<n;i++)res.PB(vector<int>{i}); while(res.size()>1){ vector<vector<int>>nw; for(int i=0;i+1<res.size();i+=2){ nw.PB(mrg(res[i],res[i+1])); } if(res.size()%2==1)nw.PB(res.back()); res.clear(); res.insert(res.begin(),nw.begin(),nw.end()); } for(int i=0;i<n;i++)p[res[0][i]]=i+1; }else{ stack<P>res; vector<int>o,e; for(int i=0;i<n;i++)b[i]=1; playRound(b,r); for(int i=0;i<n;i++){ if(b[i]<r[i])e.PB(i); else o.PB(i); } res.push(P(1,o)); res.push(P(o.size()+1,e)); while(!res.empty()){ int x=res.top().F; o=res.top().S; int s=o.size(); res.pop(); if(s==1){ p[o[0]]=x; continue; } for(int i=1;i<=w;i++){ if(i*s>w)continue; if(s<i+1){ int q=0,c=i+1-s; for(int j=1;j<=n&&c>0;j++){ if(j<x||x+s-1<j){ q+=j; c--; } } if(x+s-1<=q)continue; } if((i+1)*s<=w){ int q=0,c=w-(i+1)*s+i+1; for(int j=n;j>=1&&c>0;j--){ if(j<x||x+s-1<j){ if(c<=i+1)q+=j; c--; } } if(x>q)continue; } ini(); for(int j=0;j<s;j++)b[o[j]]=i; playRound(b,r); vector<int>v,u; for(int j=0;j<s;j++){ if(b[o[j]]<r[o[j]])u.PB(o[j]); else v.PB(o[j]); } res.push(P(x,v)); res.push(P(x+v.size(),u)); break; } } } }

Compilation message (stderr)

koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:31:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<res.size();i++)b[res[i]]=w/res.size();
               ~^~~~~~~~~~~
koala.cpp: In function 'std::vector<int> mrg(std::vector<int>, std::vector<int>)':
koala.cpp:75:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(i<x.size()&&j<y.size()){
        ~^~~~~~~~~
koala.cpp:75:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(i<x.size()&&j<y.size()){
                    ~^~~~~~~~~
koala.cpp:79:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(i<x.size())res.PB(x[i++]);
        ~^~~~~~~~~
koala.cpp:80:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(j<y.size())res.PB(y[j++]);
        ~^~~~~~~~~
koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:90:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i+1<res.size();i+=2){
                ~~~^~~~~~~~~~~
koala.cpp: In function 'int minValue(int, int)':
koala.cpp:23:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...