Submission #198396

# Submission time Handle Problem Language Result Execution time Memory
198396 2020-01-25T21:14:55 Z SuperJava Mechanical Doll (IOI18_doll) C++17
53 / 100
143 ms 17832 KB
#include "doll.h"
#include <vector>
#include <utility>
#include <iostream>
#define sz(A) int(size(A))
using namespace std;

vector<int> adj[200005];
vector<int> v = {2,4,8,16,32,64,128,256,512,1024,2048,
				4096,8192,16384,32768,65536,131072,
				262144};

int dig(int x){
	int ans = 0;
	while(x != 1){
		x /= 2;
		ans++;
	}
	return ans;
}

void create_circuit(int M, vector<int> A) {
	for(int i = 0; i < sz(A)-1; i++){
		adj[A[i]].push_back(A[i+1]);
	}
	adj[A[sz(A)-1]].push_back(0);
	vector<int> C(M+1);
	C[0] = A[0];
	vector<int> X,Y;
	for(int i = 1; i <= M; i++){
		int w = sz(adj[i]);
		if(w == 0) continue;
		if(w == 1){
			C[i] = adj[i][0];
			continue;
		}
		if(w == 2){
			C[i] = -(sz(X)+1);
			X.push_back(adj[i][0]);
			Y.push_back(adj[i][1]);
			continue;
		}
		if((w&(w-1))){
			C[i] = -(sz(X)+1);
			int fulen = *lower_bound(v.begin(), v.end(),w);
			vector<pair<int,int>> news(fulen-1);
			for(int j = 0; j < fulen/2-1; j++){
				news[j].first = -(j+1)*2-sz(X);
				news[j].second = -(j+1)*2-sz(X)-1;
			}
			int digits = dig(fulen);
			vector<int> toadd(fulen);
			for(int j = 0; j < w-1; j++){
				toadd[j] = adj[i][j];
			}
			for(int j = w-1; j < fulen-1; j++){
				toadd[j] = -(sz(X)+1);
			}
			toadd[fulen-1] = adj[i][w-1];
			for(int j = 0; j < fulen; j++){
				int res = 0;
				for(int k = 0; k < digits; k++){
					res += (1<<k)*((j&(1<<(digits-k-1))) > 0);
				}
				if(res&1){
					news[res/2+fulen/2-1].second = toadd[j];
				}else{
					news[res/2+fulen/2-1].first = toadd[j];
				}
			}
			for(int j = 0; j < fulen-1; j++){
				X.push_back(news[j].first);
				Y.push_back(news[j].second);
			}
		}else{
			C[i] = -(sz(X)+1);
			int fulen = *lower_bound(v.begin(), v.end(),w);
			vector<pair<int,int>> news(fulen-1);
			for(int j = 0; j < fulen/2-1; j++){
				news[j].first = -(j+1)*2-sz(X);
				news[j].second = -(j+1)*2-sz(X)-1;
			}
			int digits = dig(fulen);
			vector<int> toadd(fulen);
			for(int j = 0; j < w; j++){
				toadd[j] = adj[i][j];
			}
			for(int j = 0; j < fulen; j++){
				int res = 0;
				for(int k = 0; k < digits; k++){
					res += (1<<k)*((j&(1<<(digits-k-1))) > 0);
				}
				if(res&1){
					news[res/2+fulen/2-1].second = toadd[j];
				}else{
					news[res/2+fulen/2-1].first = toadd[j];
				}
			}
			for(int j = 0; j < fulen-1; j++){
				X.push_back(news[j].first);
				Y.push_back(news[j].second);
			}
		}
	}
	answer(C,X,Y);
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 4940 KB Output is correct
2 Correct 37 ms 8716 KB Output is correct
3 Correct 28 ms 8268 KB Output is correct
4 Correct 4 ms 4988 KB Output is correct
5 Correct 14 ms 6092 KB Output is correct
6 Correct 46 ms 10036 KB Output is correct
7 Correct 4 ms 4940 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 4940 KB Output is correct
2 Correct 37 ms 8716 KB Output is correct
3 Correct 28 ms 8268 KB Output is correct
4 Correct 4 ms 4988 KB Output is correct
5 Correct 14 ms 6092 KB Output is correct
6 Correct 46 ms 10036 KB Output is correct
7 Correct 4 ms 4940 KB Output is correct
8 Correct 55 ms 10388 KB Output is correct
9 Correct 60 ms 10880 KB Output is correct
10 Correct 86 ms 13320 KB Output is correct
11 Correct 4 ms 4940 KB Output is correct
12 Correct 5 ms 4940 KB Output is correct
13 Correct 4 ms 4940 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 4940 KB Output is correct
2 Correct 37 ms 8716 KB Output is correct
3 Correct 28 ms 8268 KB Output is correct
4 Correct 4 ms 4988 KB Output is correct
5 Correct 14 ms 6092 KB Output is correct
6 Correct 46 ms 10036 KB Output is correct
7 Correct 4 ms 4940 KB Output is correct
8 Correct 55 ms 10388 KB Output is correct
9 Correct 60 ms 10880 KB Output is correct
10 Correct 86 ms 13320 KB Output is correct
11 Correct 4 ms 4940 KB Output is correct
12 Correct 5 ms 4940 KB Output is correct
13 Correct 4 ms 4940 KB Output is correct
14 Correct 107 ms 14108 KB Output is correct
15 Correct 66 ms 9716 KB Output is correct
16 Correct 90 ms 12140 KB Output is correct
17 Correct 4 ms 4940 KB Output is correct
18 Correct 5 ms 4940 KB Output is correct
19 Correct 4 ms 4940 KB Output is correct
20 Correct 95 ms 13408 KB Output is correct
21 Correct 5 ms 4940 KB Output is correct
22 Correct 4 ms 4940 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 4940 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 4 ms 4940 KB Output is partially correct
2 Correct 58 ms 9700 KB Output is correct
3 Partially correct 102 ms 12716 KB Output is partially correct
4 Partially correct 103 ms 13480 KB Output is partially correct
# Verdict Execution time Memory Grader output
1 Partially correct 4 ms 4940 KB Output is partially correct
2 Correct 58 ms 9700 KB Output is correct
3 Partially correct 102 ms 12716 KB Output is partially correct
4 Partially correct 103 ms 13480 KB Output is partially correct
5 Partially correct 128 ms 15784 KB Output is partially correct
6 Partially correct 126 ms 16624 KB Output is partially correct
7 Partially correct 130 ms 16320 KB Output is partially correct
8 Partially correct 123 ms 17264 KB Output is partially correct
9 Partially correct 88 ms 15084 KB Output is partially correct
10 Partially correct 127 ms 16776 KB Output is partially correct
11 Partially correct 143 ms 17832 KB Output is partially correct
12 Partially correct 82 ms 13484 KB Output is partially correct
13 Partially correct 84 ms 12752 KB Output is partially correct
14 Partially correct 100 ms 12404 KB Output is partially correct
15 Partially correct 85 ms 12080 KB Output is partially correct
16 Partially correct 6 ms 5256 KB Output is partially correct
17 Partially correct 73 ms 11744 KB Output is partially correct
18 Partially correct 94 ms 11692 KB Output is partially correct
19 Partially correct 92 ms 12264 KB Output is partially correct
20 Partially correct 100 ms 14252 KB Output is partially correct
21 Partially correct 110 ms 16264 KB Output is partially correct
22 Partially correct 95 ms 13824 KB Output is partially correct