제출 #140216

#제출 시각아이디문제언어결과실행 시간메모리
140216bazsi700자동 인형 (IOI18_doll)C++14
9 / 100
115 ms10536 KiB
#include <bits/stdc++.h> #include "doll.h" using namespace std; #define MOD 1000000007 #define ll long long int #define vi vector<int> #define vii vector< vector<int> > #define PI 3.1415926535897932384626433832795 #define INF 9223372036854775807LL #define hashA 1257958787 #define hashB 1539500609 #define endl "\n" bool was[1000005]; int getnext(int x, int cn) { if(x == 0) { return cn/2; } int ls = (x & (-x)); x+= ls*2; if(x >= cn) { x = ls/2; } return x; } vector<pair<int,int> > getorder(int cn) { vector<pair<int,int> > ord; int currpos = 0; for(int i = 0; i < cn; i++) { ord.push_back({currpos,0}); currpos = getnext(currpos,cn); } for(int i = 0; i < cn; i++) { ord.push_back({ord[i].first,1}); } return ord; } void create_circuit(int m, std::vector<int> A) { vector<int> C(m+1,-1); int n = A.size(); int cn = 1; int ends = 1; while(2*ends < n+1) { cn*=2; cn++; ends*= 2; } vector<int> X (cn); vector<int> Y (cn); for(int i = 0; (i+1)*2 < cn; i++) { X[i] = -(i*2+2); Y[i] = -(i*2+3); } int ind = 0; vector<pair<int,int> > ord = getorder(ends); //cout << ends << " " << ord.size() << endl; for(int i = 0; i < 2*ends; i++) { //cout << ord[i].first << endl; if(ord[i].second == 0) { if(ind < n) { X[ord[i].first+cn/2] = A[ind++]; } else { X[ord[i].first+cn/2] = -1; } } else { if(ind < n) { Y[ord[i].first+cn/2] = A[ind++]; } else { Y[ord[i].first+cn/2] = -1; } } } Y[cn-1] = 0; /*for(int i = 0; i < cn; i++) { cout << X[i] << " " << Y[i] << endl; }*/ answer(C,X,Y); }
#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...