Submission #1309024

#TimeUsernameProblemLanguageResultExecution timeMemory
1309024nikaa123Mechanical Doll (IOI18_doll)C++20
6 / 100
50 ms14824 KiB
#include "doll.h"
#include <bits/stdc++.h>
#define deb(x)  cout << #x << " ---> " << x << endl
using namespace std;

// void answer(vector <int> C, vector <int> X, vector <int> Y) {
//     cout << C.size() << endl;
//     for (auto x:C) {
//         cout << x << " " ;
//     }
//     cout << endl;
//     cout << X.size() << endl;
//     for (int i = 0; i < X.size(); i++) {
//         cout << X[i] << " " << Y[i] << endl;
//     }
// }

vector <vector<int>> v(2e5+5);

void create_circuit(int M, vector<int> A) {
  A.push_back(0);
  A.insert(A.begin(),0);
  int N = A.size();
  vector<int> C(M + 1);
  for (int i = 0; i <= M; ++i) {
    C[i] = 1;
  }
  vector<int> X, Y;

  for (int i = 1; i <= N-1; i++) {
    v[A[i-1]].push_back(A[i]);
  }
  int S = 1;
//   cout << 1 << endl;
  for (int i = 0; i <= M; i++) {
    // cout << i << endl;
    int k = v[i].size();
    if (k == 1) {
      C[i] = v[i][0];
    } else if (k > 1) {
        // cout << i << endl;
      int cur = 2;
      vector <int> res;
      C[i] = (0-S);
      res.push_back(S++);
      X.push_back(-1);
      Y.push_back(-1);
      while (cur < k) {
        vector <int> nres;
        for (auto x:res) {
          X[x] = S;
          Y[x] = S+1;
          nres.push_back(S);
          nres.push_back(S+1);
          X.push_back(-1);
          Y.push_back(-1);
          X.push_back(-1);
          Y.push_back(-1);
          S+=2;
        }
        cur *= 2;
        res = nres;
      }
    //   deb(cur);
      int xr = cur - k;
    //   deb(xr);
    //   deb(X[0]);
    //   deb(Y[0]);
    //   deb(res[0]);
      for (int j = 0; j < xr; j++) {
        X[res[j]] = res[j];
      }
    //   deb(X[0]);
    //   deb(Y[0]);
      int pos = 0;
      for (int j = 0; j < cur; j++) {
        if (j%2==0) {
          int o = j/2;
          o = res[o]-1;
          if (X[o] != -1) continue;
        //   cout << j << endl;
          X[o] = v[i][pos];
        //   deb(X[o]);
          pos++;
        } else {
          int o = j/2;
          o = res[o]-1;
          if (Y[o] != -1) continue;
        //   cout << j << endl;
          Y[o] = v[i][pos];
          pos++;
        }
      }
    }
  }
  
  answer(C, X, Y);
}

// int main () {

//     int n,m;
//     cin >> m;
//     cin >> n;
//     vector <int> a(n);
//     for (int i= 1; i <= n; i++) {
//         cin >> a[i-1];
//     }
//     create_circuit(m,a);


// }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...