#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |