Submission #132684

# Submission time Handle Problem Language Result Execution time Memory
132684 2019-07-19T10:36:35 Z dvdg6566 Mechanical Doll (IOI18_doll) C++14
0 / 100
48 ms 7672 KB
#include "doll.h"
#include<bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
#define pb emplace_back
#define SZ(x) (int)x.size()
 
inline int MSB(unsigned int x){
  return 32-__builtin_clz(x);
}
#define INF 1e9

vi occ[100100];
int c=-1;
vi X,Y;

void fill(int sizes, int numfill, int exit, int rt){
  cout<<sizes<<' '<<numfill<<' '<<exit<<'\n';
  if (sizes == numfill){
    if (sizes == 2){
      if (exit){
        X.pb(1);
        Y.pb(0);
      }else{
        X.pb(1);
        Y.pb(1);
      }
      return;
    }
    int t=SZ(X);
    X.pb(c--);
    Y.pb(0);
    fill (sizes/2,numfill/2,0,rt);
    Y[t] = c--;
    if (exit)fill (sizes/2,numfill/2,1,rt);
    else fill(sizes/2,numfill/2,0,rt);
    return;
  }
  if (numfill == 2){
    if (sizes == 1){
      X.pb(rt);
      Y.pb(1-exit);
    }else{
      X.pb(1);
      Y.pb(1-exit);
    }
    return;
  }
  if (sizes*2 <= numfill){
    X.pb(rt);
    Y.pb(c--);
    fill (sizes, numfill/2, 0, rt);
    return;
  }else{
    int t=SZ(X);
    X.pb(c--);
    Y.pb(0);
    fill (sizes-numfill/2, numfill/2, 0, rt);
    Y[t] = c--;
    fill (numfill/2,numfill/2,exit,rt);
    return;
  }
}

void create_circuit(int M, std::vector<int> A) {
  int N = A.size();
  std::vector<int> C(M + 1,-1);
  if (M == 1){
    int t = MSB(N-1);
    int l = (1<<t);
    C[1] = c--; 
    C[0]=1;
    fill(N,l,1,-1);
    



  }else{
    occ[0].pb(A[0]);
    for (int i=0;i<N-1;++i){
      occ[A[i]].pb(A[i+1]);
    }
    occ[A[N-1]].pb(0);
    for (int i=0;i<=M;++i){
      if (SZ(occ[i]) == 0){
        C[i]=0;
      }else if(SZ(occ[i]) == 1){
        C[i]=occ[i][0];
      }else if (SZ(occ[i]) == 2){
        C[i] = c;
        --c;
        X.pb(occ[i][0]);
        Y.pb(occ[i][1]);
      }else if (SZ(occ[i]) == 3){
        int a = c;
        C[i] = a;
        c -= 3;
        X.pb(a-1);
        Y.pb(a-2);
        X.pb(occ[i][0]);
        Y.pb(a);
        X.pb(occ[i][1]);
        Y.pb(occ[i][2]);
      }else if (SZ(occ[i]) == 4){
        int a = c;
        C[i] = a;
        c -= 3;
        X.pb(a-1);
        Y.pb(a-2);
        X.pb(occ[i][0]);
        Y.pb(occ[i][2]);
        X.pb(occ[i][1]);
        Y.pb(occ[i][3]);
      }
    }
  }
  // for (int i=0;i<=M;++i)cout<<C[i]<<' ';cout<<'\n';
  answer(C,X,Y);
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 37 ms 6372 KB Output is correct
3 Correct 28 ms 5964 KB Output is correct
4 Correct 3 ms 2636 KB Output is correct
5 Correct 14 ms 3788 KB Output is correct
6 Correct 48 ms 7672 KB Output is correct
7 Incorrect 2 ms 2636 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 37 ms 6372 KB Output is correct
3 Correct 28 ms 5964 KB Output is correct
4 Correct 3 ms 2636 KB Output is correct
5 Correct 14 ms 3788 KB Output is correct
6 Correct 48 ms 7672 KB Output is correct
7 Incorrect 2 ms 2636 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 37 ms 6372 KB Output is correct
3 Correct 28 ms 5964 KB Output is correct
4 Correct 3 ms 2636 KB Output is correct
5 Correct 14 ms 3788 KB Output is correct
6 Correct 48 ms 7672 KB Output is correct
7 Incorrect 2 ms 2636 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 2636 KB wrong serial number
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 2636 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 2636 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
2 Halted 0 ms 0 KB -