Submission #1155324

#TimeUsernameProblemLanguageResultExecution timeMemory
1155324firewaterLockpicking (IOI23_lockpicking)C++20
100 / 100
15 ms6396 KiB
#include <vector> #include<bits/stdc++.h> #define ll long long using namespace std; void construct_card(int N, std::vector<int> A, std::vector<std::vector<int>> S); void define_states(int M, std::vector<int> B, std::vector<std::vector<int>> T, int j0); vector<int>two; vector<int>B; vector<vector<int> >T; int n,m,ini,now,sav,x,y; vector<int>st[50500]; int np() { B.push_back(0); T.push_back(two); return (m++); } void construct_card(int N, std::vector<int> A, std::vector<std::vector<int>> S) { n=N; m=0; B.clear(); T.clear(); two.clear(); two.push_back(0); two.push_back(0); //copy for(int i=0;i<n;++i){ np(); B[i]=A[i]; T[i]=S[i]; } ini=now=np(); for(int i=0;i<n;++i)st[now].push_back(i);//initial set //begin while(now<m){ if(st[now].size()==0){ now++; continue; } sav=A[st[now][0]]; B[now]=sav; if(st[now].size()==1||now>23000){ T[now][sav]=S[st[now][0]][sav]; now++; continue; } if(m<40000)x=np();//sav else x=S[st[now][0]][sav]; if(m<40000)y=np();//sav^1 else y=S[st[now][0]][sav^1]; T[now][sav]=x; T[now][sav^1]=y; for(int i=0;i<st[now].size();++i){ if(A[st[now][i]]==sav){ st[x].push_back(S[st[now][i]][sav]); } else{ st[y].push_back(S[st[now][i]][sav]); } } now++; } define_states(m,B,T,ini); return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...