Submission #1096457

# Submission time Handle Problem Language Result Execution time Memory
1096457 2024-10-04T13:21:53 Z guagua0407 Mechanical Doll (IOI18_doll) C++17
76.595 / 100
211 ms 25748 KB
#include "doll.h"
//#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

const int inf=1e9;

void create_circuit(int m, std::vector<int> a) {
    int n=a.size();
    int lg=__lg(n-1)+1;
    vector<int> state(1<<lg);
    vector<vector<int>> to(1<<lg,vector<int>(2,inf));
    for(int i=1;i<(1<<lg);i++){
        if(i*2<(1<<lg)) to[i][0]=-(i*2);
        if(i*2+1<(1<<lg)) to[i][1]=-(i*2+1);
    }
    vector<bool> ok(1<<lg);
    int bound=(1<<(lg-1))+(n/2)-1;
    int diaob=0;
    for(int i=0;i<(1<<lg);i++){
        int nxt=((i==(1<<lg)-1)?0:(diaob<n-1?a[diaob+1]:-1));
        int cur=1;
        while(to[cur][state[cur]]!=inf){
            state[cur]^=1;
            cur=-to[cur][state[cur]^1];
        }
        if(nxt==0 or (nxt!=-1 and cur<=bound)){
            to[cur][state[cur]]=nxt;
            state[cur]^=1;
            ok[cur]=true;
            diaob++;
        }
        else{
            to[cur][state[cur]]=-1;
            state[cur]^=1;
        }
    }
    for(int i=(1<<lg)-1;i>=1;i--){
        if(i*2<(1<<lg)) ok[i]=ok[i]|ok[i*2];
        if(i*2+1<(1<<lg)) ok[i]=ok[i]|ok[i*2+1];
    }
    vector<int> vec;
    for(int i=1;i<(1<<lg);i++){
        if(ok[i]) vec.push_back(i);
    }
    vector<int> c(m+1,-1);
    c[0]=a[0];
    vector<int> x(vec.size()),y(vec.size());
    vector<int> id(1<<lg,inf);
    for(int i=0;i<(int)vec.size();i++){
        id[vec[i]]=i+1;
    }
    for(int i=1;i<(1<<lg);i++){
        if(i*2<(1<<lg) and !ok[-to[i][0]]) to[i][0]=-1;
        if(i*2+1<(1<<lg) and !ok[-to[i][1]]) to[i][1]=-1;
    }
    for(int i=0;i<(int)vec.size();i++){
        x[i]=to[vec[i]][0];
        y[i]=to[vec[i]][1];
        if(x[i]<0) x[i]=-id[-x[i]];
        if(y[i]<0) y[i]=-id[-y[i]];
        //if(x[i]==0) swap(x[i],y[i]);
    }
    answer(c,x,y);
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 67 ms 7996 KB Output is correct
3 Correct 78 ms 11508 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 6 ms 1372 KB Output is correct
6 Incorrect 107 ms 13360 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 67 ms 7996 KB Output is correct
3 Correct 78 ms 11508 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 6 ms 1372 KB Output is correct
6 Incorrect 107 ms 13360 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 67 ms 7996 KB Output is correct
3 Correct 78 ms 11508 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 6 ms 1372 KB Output is correct
6 Incorrect 107 ms 13360 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 87 ms 13388 KB Output is correct
3 Correct 200 ms 21444 KB Output is correct
4 Partially correct 211 ms 25292 KB Output is partially correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 87 ms 13388 KB Output is correct
3 Correct 200 ms 21444 KB Output is correct
4 Partially correct 211 ms 25292 KB Output is partially correct
5 Partially correct 198 ms 25748 KB Output is partially correct
6 Partially correct 198 ms 25656 KB Output is partially correct
7 Partially correct 206 ms 25656 KB Output is partially correct
8 Partially correct 191 ms 25508 KB Output is partially correct
9 Partially correct 148 ms 22216 KB Output is partially correct
10 Partially correct 178 ms 25360 KB Output is partially correct
11 Partially correct 199 ms 25492 KB Output is partially correct
12 Correct 192 ms 22216 KB Output is correct
13 Correct 82 ms 14404 KB Output is correct
14 Correct 166 ms 22468 KB Output is correct
15 Correct 157 ms 22724 KB Output is correct
16 Correct 2 ms 1116 KB Output is correct
17 Correct 72 ms 14340 KB Output is correct
18 Correct 79 ms 14328 KB Output is correct
19 Correct 178 ms 22212 KB Output is correct
20 Partially correct 196 ms 25360 KB Output is partially correct
21 Partially correct 184 ms 25540 KB Output is partially correct
22 Partially correct 171 ms 25284 KB Output is partially correct