Submission #56986

#TimeUsernameProblemLanguageResultExecution timeMemory
56986hamzqq9Amusement Park (JOI17_amusement_park)C++14
28 / 100
46 ms12592 KiB
#include "Joi.h" #include<bits/stdc++.h> using namespace std; #define ll long long #define st first #define nd second #define pb push_back #define MAX 20005 #define sz(x) ((int)x.size()) #define pw(x) (1LL<<(x)) static int N,M,CurBit,A[MAX],B[MAX],Bit[69],VAL[MAX]; static bool COME[MAX]; static vector<int> v[MAX],v2[MAX]; static ll X; static int CENTER,GMax; static void CreateGraph() { for(int i=0;i<M;i++) { v[A[i]].pb(B[i]); v[B[i]].pb(A[i]); } } static void CreateBits() { for(int i=0;i<60;i++) { Bit[i]=((X&pw(i))>0); } } static int dist[MAX]; static bool vis[MAX]; static void findPath(int TO) { queue< pair<int,int> > Q; for(int i=0;i<N;i++) dist[i]=N+10,vis[i]=0; Q.push({TO,0}); while(!Q.empty()) { pair<int,int> cur=Q.front(); Q.pop(); if(vis[cur.st]) continue ; vis[cur.st]=true; dist[cur.st]=cur.nd; for(int child:v[cur.st]) { Q.push({child,cur.nd+1}); } } } static void dfs2(int node,int ata) { ++CurBit; MessageBoard(node,Bit[CurBit]); VAL[node]=Bit[CurBit]; for(int child:v2[node]) { if(child==ata) continue ; dfs2(child,node); } } int DEP[MAX]; static void dfs(int node,int ata) { int tut=-1; int pos=-1; for(int i=0;i<sz(v2[node]);i++) { int child=v2[node][i]; dfs(child,node); DEP[node]=max(DEP[node],DEP[child]); if(DEP[node]==DEP[child]) { tut=child; pos=i; } } if(~tut) { swap(v2[node][pos],v2[node][sz(v2[node])-1]); } DEP[node]++; } static void SpanningTree(int node,int ata,bool SEND) { if(CurBit==59 || COME[node]) return ; COME[node]=true; if(~ata) { v2[ata].pb(node); } ++CurBit; if(SEND) { MessageBoard(node,Bit[CurBit]); VAL[node]=Bit[CurBit]; } for(int child:v[node]) { if(child==ata) continue ; SpanningTree(child,node,SEND); } } static void SUB2() { CreateGraph(); CreateBits(); CurBit=-1; SpanningTree(0,-1,true); } static void SUB3() { CreateBits(); for(int i=0;i<N;i++) { VAL[i]=Bit[i%60]; MessageBoard(i,VAL[i]); } } static void SUB4() { CreateGraph(); CreateBits(); CENTER=31; CurBit=-1; SpanningTree(CENTER,-1,false); dfs(CENTER,-1); CurBit=-1; dfs2(CENTER,-1); } void Joi(int N, int M, int A[], int B[], long long X, int T) { ::N=N; ::M=M; ::X=X; for(int i=0;i<M;i++) { ::A[i]=A[i]; ::B[i]=B[i]; } for(int i=0;i<N;i++) VAL[i]=-1; if(T==1 || T==4) SUB4(); if(T==2) SUB2(); if(T==3) SUB3(); for(int i=0;i<N;i++) { if(VAL[i]!=-1) continue ; MessageBoard(i,0); } }
#include "Ioi.h" #include<bits/stdc++.h> using namespace std; #define ll long long #define st first #define nd second #define pb push_back #define MAX 20005 #define sz(x) ((int) x.size()) #define pw(x) (1LL<<(x)) static int CurBit,M,N,P,V,CENTER,GMax; static int A[MAX],B[MAX]; static bool COME[MAX]; static vector<int> v[MAX],v2[MAX]; static ll X; static void CreateGraph() { for(int i=0;i<M;i++) { v[A[i]].pb(B[i]); v[B[i]].pb(A[i]); } } static void SpanningTree(int node,int ata) { if(CurBit==59 || COME[node]) return ; COME[node]=true; ++CurBit; if(~ata) { v2[ata].pb(node); } for(int child:v[node]) { if(child==ata) continue ; SpanningTree(child,node); } } static void dfs(int node,int ata) { ++CurBit; X+=pw(CurBit)*V; for(int child:v2[node]) { V=Move(child); dfs(child,node); if(CurBit<59) V=Move(node); } } static int dist[MAX]; static bool vis[MAX]; static void findPath(int TO,bool GOON) { queue< pair<int,int> > Q; for(int i=0;i<N;i++) dist[i]=N+10,vis[i]=0; Q.push({TO,0}); while(!Q.empty()) { pair<int,int> cur=Q.front(); Q.pop(); if(vis[cur.st]) continue ; vis[cur.st]=true; dist[cur.st]=cur.nd; for(int child:v[cur.st]) { Q.push({child,cur.nd+1}); } } if(!GOON) return ; while(P!=TO) { for(int child:v[P]) { if(dist[child]==dist[P]-1) { V=Move(child); P=child; break ; } } } } static int DEP[MAX]; void dfs2(int node,int ata) { int tut=-1; int pos=-1; for(int i=0;i<sz(v2[node]);i++) { int child=v2[node][i]; dfs2(child,node); DEP[node]=max(DEP[node],DEP[child]); if(DEP[node]==DEP[child]) { tut=child; pos=i; } } if(~tut) { swap(v2[node][pos],v2[node][sz(v2[node])-1]); } DEP[node]++; } static ll SUB2() { CreateGraph(); CurBit=-1; SpanningTree(0,-1); findPath(0,true); CurBit=-1; dfs(P,-1); return X; } static ll SUB4() { CreateGraph(); CENTER=31; CurBit=-1; SpanningTree(CENTER,-1); dfs2(CENTER,-1); CurBit=-1; findPath(CENTER,true); dfs(CENTER,-1); return X; } static ll SUB3() { while(P%60 || P+59>=N) { P--; V=Move(P); } for(int i=P;i<P+60;i++) { X+=pw(i-P)*V; if(i+1<N) V=Move(i+1); } return X; } long long Ioi(int N, int M, int A[], int B[], int P, int V, int T) { ::N=N; ::M=M; ::P=P; ::V=V; for(int i=0;i<M;i++) { ::A[i]=A[i]; ::B[i]=B[i]; } if(T==1 || T==4) return SUB4(); if(T==2) return SUB2(); if(T==3) return SUB3(); assert(0); }

Compilation message (stderr)

Joi.cpp:44:13: warning: 'void findPath(int)' defined but not used [-Wunused-function]
 static void findPath(int TO) {
             ^~~~~~~~
Joi.cpp:18:19: warning: 'GMax' defined but not used [-Wunused-variable]
 static int CENTER,GMax;
                   ^~~~

Ioi.cpp:14:34: warning: 'GMax' defined but not used [-Wunused-variable]
 static int CurBit,M,N,P,V,CENTER,GMax;
                                  ^~~~
#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...