답안 #1094459

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1094459 2024-09-29T16:28:29 Z Math4Life2020 자동 인형 (IOI18_doll) C++17
0 / 100
1 ms 348 KB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
const int INF = 1e9;

int v2(int x) {
	return __builtin_ctz(x);
}

int l2(int x) {
	return (31-__builtin_clz(x));
}

void create_circuit(int M, vector<int> A) {
	int N = A.size();
	vector<int> C;
	C.push_back(A[0]);
	for (int i=0;i<M;i++) {
		C.push_back(-1);
	}
	vector<int> X,Y;
	int CIND = 0;
	int D = l2(2*N-1);
	stack<pii> bd;
	bd.push({N,D});
	while (!bd.empty()) {
		pii p0 = bd.top(); bd.pop();
		int k = p0.first; int d = p0.second;
		if (d==1) {
			if (k==1) {
				X.push_back(0);
				Y.push_back(-INF);
			} else if (k==2) {
				X.push_back(-INF);
				Y.push_back(-INF);
			} else {
				cout << "reporting error #1\n";
			}
		} else {
			if (k>(1<<(d-1))) {
				Y.push_back(CIND+1);
				X.push_back(CIND+(1<<(d-1)));
				bd.push({(1<<(d-1)),d-1});
				bd.push({k-(1<<(d-1)),d-1});
			} else {
				X.push_back(0);
				Y.push_back(CIND+1);
				bd.push({k,d-1});
			}
		}
		CIND++;
	}
	bool st[X.size()];
	for (int t=0;t<N;t++) {
		st[t]=0;
	}
	for (int t=0;t<N;t++) {
		int cx = 0;
		int locp = -1;
		bool stp = 0;
		while (cx >= 0) {
			if (st[cx]==0) {
				st[cx]=1;
				locp = cx;
				stp = 0;
				cx = X[cx];
			} else {
				st[cx]=0;
				locp = cx;
				stp = 1;
				cx = Y[cx];
			}
		}
		if (cx != -INF) {
			cout << "invalid value\n";
		} else {
			int nval;
			if (t<(N-1)) {
				nval = A[t+1];
			} else {
				nval = 0;
			}
			nval++;
			if (stp==0) {
				X[locp]=-INF+1+nval;
			} else {
				Y[locp]=-INF+1+nval;
			}
		}
	}
	for (int i=0;i<N;i++) {
		for (int d=0;d<X.size();d++) {
			if (X[d]>=0) {
				X[d]=-1-X[d];
			} else {
				X[d]=(-INF+1)-X[d];
			}
			if (Y[d]>=0) {
				Y[d]=-1-Y[d];
			} else {
				Y[d]=(-INF+1)-Y[d];
			}
		}
	}
	answer(C,X,Y);
}

Compilation message

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:93:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |   for (int d=0;d<X.size();d++) {
      |                ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB wrong serial number
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB DO NOT PRINT ANYTHING TO STANDARD OUTPUT
2 Halted 0 ms 0 KB -