Submission #43974

#TimeUsernameProblemLanguageResultExecution timeMemory
43974model_codeLibrary (JOI18_library)C++17
100 / 100
489 ms716 KiB
#include <cstdio> #include <vector> #include <cstring> #include <functional> #include <algorithm> #include <math.h> #include <bitset> #include <set> #include <queue> #include <assert.h> #include <iostream> #include <string> #include <sstream> #include <stack> #include <complex> #include <numeric> #include <map> #include <time.h> #include "library.h" using namespace std; typedef long double ld; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; typedef pair<int,int> pii; typedef pair<int,ll> pil; typedef pair<int,ull> piu; typedef pair<ull,ull> puu; typedef pair<ll,int> pli; typedef pair<ll,ll> pll; typedef pair<pii,ll> ppl; typedef pair<ll,pii> plp; typedef pair<ll,pll> plP; typedef pair<int,pii> pip; typedef pair<pii,int> ppi; typedef pair<pii,pii> ppp; typedef pair<double,int> pdi; typedef pair<int,double> pid; typedef pair<double,pii> pdp; typedef pair<double,double> pdd; typedef pair<pdd,double> pd3; typedef vector<ll> vec; typedef vector<vec> mat; #define rep(i,n) for (int (i) = 0; (i) < (n); (i)++) #define repn(i,a,n) for (int (i) = (a); (i) < (n); (i)++) #define ALL(x) (x).begin(),(x).end() #define pb push_back #define SORT(x) sort((x).begin(),(x).end()) #define SORTN(x,n) sort((x),(x)+(n)) #define ERASE(x) (x).erase(unique((x).begin(),(x).end()),(x).end()) #define COUNT(x,c) count((x).begin(),(x).end(),(c)) #define REMOVE(x,c) (x).erase(remove((x).begin(),(x).end(),(c)),(x).end()) #define REVERSE(x) reverse((x).begin(),(x).end()) #define FORIT(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++) #define LB(x,a) lower_bound((x).begin(),(x).end(),(a))-(x).begin() #define lb(x,a) lower_bound((x).begin(),(x).end(),(a)) #define LBN(x,a,n) lower_bound((x),(x)+(n),(a))-(x) #define lbN(x,a,n) lower_bound((x),(x)+(n),(a)) #define UB(x,a) upper_bound((x).begin(),(x).end(),(a))-(x).begin() #define ub(x,a) upper_bound((x).begin(),(x).end(),(a)) #define BS(x,a) binary_search((x).begin(),(x).end(),(a)) #define BS2(x,n,a) binary_search((x),(x)+(n),(a)) #define NB(x) (((x)&~((x)+((x)&-(x))))/((x)&-(x))>>1)|((x)+((x)&-(x))) #define NP(x) next_permutation((x).begin(),(x).end()) #define MM(x,p) memset((x),(p),sizeof(x)) #define SQ(x) (x)*(x) #define SC(c1,c2) strcmp(c1,c2)==0 #define mp make_pair #define INF (1<<29) #define INFL (1LL<<61) #define fi first #define se second #define EPS 1e-9 #define MOD 1000000007 #define MIN(x,a) x=min(x,a) #define MAX(x,a) x=max(x,a) #define madd(x,a) x=(x+a)%MOD #define msub(x,a) x=(x+MOD-a)%MOD #define OUTPUT(x) rep(__,x.size())printf("%d%c",x[__],__+1==x.size()?'\n':' ') int N_; int res[1001]; bool used[1001]; int calc(vector<int> h) { vector<int> hh(N_,0); for(int i=0;i<h.size();i++)hh[h[i]-1]=1; return Query(hh); } pair<int,int> jud_s(vector<int> f) { vector<int> fv; bitset<1001> bt; rep(i,f.size())bt.set(f[i]); rep(i,N_)if(res[i]>0)bt.set(res[i]); repn(i,1,N_+1)if(!bt.test(i))fv.pb(i); return mp(calc(f),calc(fv)); } vector<pii> pending; void sol_pos(int v,vector<int> f) { if(f.size()==1) { pending.pb(mp(v,f[0])); return; } vector<int> h1,h2; rep(i,f.size()/2)h1.pb(f[i]); repn(i,f.size()/2,f.size())h2.pb(f[i]); pii c1=jud_s(h1); if((c1.fi+c1.se)%2==1)sol_pos(v,h2); else sol_pos(v,h1); } void sol(int l,int r,vector<int> f) { if(l==r) { res[l]=f[0]; used[f[0]]=true; return; } vector<int> h1,h2; rep(i,f.size()/2)h1.pb(f[i]); repn(i,f.size()/2,f.size())h2.pb(f[i]); pii c1=jud_s(h1); if((c1.fi+c1.se)%2==1) { if(c1.fi>c1.se)sol(l,r,h1); else sol(l,r,h2); } else { if(l==0&&r==N_-1)sol_pos(l,h1),sol_pos(r,h2); else { h1.pb(res[l-1]); int c1n=calc(h1); h1.pop_back(); if(c1.fi==c1n)sol_pos(l,h1),sol_pos(r,h2); else sol_pos(l,h2),sol_pos(r,h1); } } } void Solve(int N) { N_=N; MM(res,-1); int l=0,r=N-1; while(l<=r) { pending.clear(); vector<int> h; bitset<1001> bt; rep(i,N)if(res[i]>0)bt.set(res[i]); repn(i,1,N+1)if(!bt.test(i))h.pb(i); sol(l,r,h); l++;r--; rep(_,pending.size()) { int v=pending[_].fi; int val=pending[_].se; res[v]=val; used[val]=true; } } vector<int> rr; rep(i,N)rr.pb(res[i]); Answer(rr); }

Compilation message (stderr)

library.cpp: In function 'int calc(std::vector<int>)':
library.cpp:89:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<h.size();i++)hh[h[i]-1]=1;
              ~^~~~~~~~~
library.cpp: In function 'std::pair<int, int> jud_s(std::vector<int>)':
library.cpp:44:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n) for (int (i) = 0; (i) < (n); (i)++)
                                    ~~~~^~~~~
library.cpp:97:2: note: in expansion of macro 'rep'
  rep(i,f.size())bt.set(f[i]);
  ^~~
library.cpp: In function 'void sol_pos(int, std::vector<int>)':
library.cpp:44:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n) for (int (i) = 0; (i) < (n); (i)++)
                                    ~~~~^~~~~
library.cpp:111:2: note: in expansion of macro 'rep'
  rep(i,f.size()/2)h1.pb(f[i]);
  ^~~
library.cpp:45:45: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define repn(i,a,n) for (int (i) = (a); (i) < (n); (i)++)
                                         ~~~~^~~~~
library.cpp:112:2: note: in expansion of macro 'repn'
  repn(i,f.size()/2,f.size())h2.pb(f[i]);
  ^~~~
library.cpp: In function 'void sol(int, int, std::vector<int>)':
library.cpp:44:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n) for (int (i) = 0; (i) < (n); (i)++)
                                    ~~~~^~~~~
library.cpp:127:2: note: in expansion of macro 'rep'
  rep(i,f.size()/2)h1.pb(f[i]);
  ^~~
library.cpp:45:45: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define repn(i,a,n) for (int (i) = (a); (i) < (n); (i)++)
                                         ~~~~^~~~~
library.cpp:128:2: note: in expansion of macro 'repn'
  repn(i,f.size()/2,f.size())h2.pb(f[i]);
  ^~~~
library.cpp: In function 'void Solve(int)':
library.cpp:44:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n) for (int (i) = 0; (i) < (n); (i)++)
                                    ~~~~^~~~~
library.cpp:163:3: note: in expansion of macro 'rep'
   rep(_,pending.size())
   ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...