Submission #55095

# Submission time Handle Problem Language Result Execution time Memory
55095 2018-07-06T04:35:05 Z ksun48 Broken Device (JOI17_broken_device) C++14
85 / 100
106 ms 4088 KB
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

void done(vector<LL> message, vector<LL> perm){
	for(int i = 0; i < message.size(); i++){
		Set(i, message[perm[i]]);
	}
}

void Anna(int N, long long X, int K, int P[]){

	// shared initialization
	static mt19937_64 mt1(484855);
	static mt19937_64 mt2(48484899);
	static LL B = 60;
	LL Y = mt1() & ((1LL << B) - 1);
	vector<LL> perm(N);
	for(int i = 0; i < N; i++){
		perm[i] = i;
	}
	for(int i = N-1; i >= 0; i--){
		int d = mt2() % (i+1);
		if(d < 0){
			d += (i+1);
		}
		swap(perm[i], perm[d]);
	}
	// shared initialization

	X ^= Y;

	vector<LL> message(N, 0);
	// boilerplate
	// ----------------------------------

	vector<LL> bad(N, 0);
	for(int i = 0; i < K; i++){
		bad[perm[P[i]]] = 1;
	}

	vector<LL> usable;
	for(int i = 0; i * 2 < N; i++){
		if(!bad[2*i] && !bad[2*i+1]){
			usable.push_back(i);
		}
	}

	// 01 10 11
	vector<LL> num;
	for(int i = 0; i < 38; i++){
		num.push_back(1 + (X % 3));
		X /= 3;
	}
	reverse(num.begin(), num.end());
	for(int j = 0; j < num.size() && j < usable.size(); j++){
		int a = usable[j];
		message[2*a] = num[j] / 2;
		message[2*a+1] = num[j] % 2;
	}

	// ----------------------------------
	done(message, perm);
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

using namespace std;

long long Bruno(int N, int A[]){

	// shared initialization
	static mt19937_64 mt1(484855);
	static mt19937_64 mt2(48484899);
	static LL B = 60;
	LL Y = mt1() & ((1LL << B) - 1);
	vector<LL> perm(N);
	for(int i = 0; i < N; i++){
		perm[i] = i;
	}
	for(int i = N-1; i >= 0; i--){
		int d = mt2() % (i+1);
		if(d < 0){
			d += (i+1);
		}
		swap(perm[i], perm[d]);
	}
	// shared initialization

	vector<LL> message(N);
	for(int i = 0; i < N; i++){
		message[perm[i]] = A[i];
	}

	vector<LL> info(60, 0);
	// boilerplate
	// ----------------------------------

	LL X = 0;
	for(int i = 0; i * 2 < N; i++){
		if(message[2*i] == 0 && message[2*i+1] == 0) continue;
		LL r = message[2*i] * 2 + message[2*i+1] - 1;
		X = (X * 3 + r);
	}

	// ----------------------------------
	return X ^ Y;
}

Compilation message

Anna.cpp: In function 'void done(std::vector<long long int>, std::vector<long long int>)':
Anna.cpp:7:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < message.size(); i++){
                 ~~^~~~~~~~~~~~~~~~
Anna.cpp: In function 'void Anna(int, long long int, int, int*)':
Anna.cpp:57:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 0; j < num.size() && j < usable.size(); j++){
                 ~~^~~~~~~~~~~~
Anna.cpp:57:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 0; j < num.size() && j < usable.size(); j++){
                                   ~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Partially correct 62 ms 3056 KB Output is partially correct - L* = 38
2 Partially correct 53 ms 3464 KB Output is partially correct - L* = 38
3 Partially correct 52 ms 3488 KB Output is partially correct - L* = 38
4 Partially correct 64 ms 3488 KB Output is partially correct - L* = 38
5 Partially correct 57 ms 3744 KB Output is partially correct - L* = 38
6 Partially correct 77 ms 3744 KB Output is partially correct - L* = 38
7 Partially correct 50 ms 3800 KB Output is partially correct - L* = 38
8 Partially correct 53 ms 3800 KB Output is partially correct - L* = 38
9 Partially correct 52 ms 3840 KB Output is partially correct - L* = 38
10 Partially correct 61 ms 4048 KB Output is partially correct - L* = 38
11 Partially correct 81 ms 4048 KB Output is partially correct - L* = 38
12 Partially correct 71 ms 4048 KB Output is partially correct - L* = 37
13 Partially correct 84 ms 4072 KB Output is partially correct - L* = 38
14 Partially correct 69 ms 4072 KB Output is partially correct - L* = 38
15 Partially correct 68 ms 4072 KB Output is partially correct - L* = 38
16 Partially correct 52 ms 4072 KB Output is partially correct - L* = 37
17 Partially correct 83 ms 4072 KB Output is partially correct - L* = 38
18 Partially correct 52 ms 4072 KB Output is partially correct - L* = 37
19 Partially correct 53 ms 4072 KB Output is partially correct - L* = 37
20 Partially correct 50 ms 4088 KB Output is partially correct - L* = 37
21 Partially correct 50 ms 4088 KB Output is partially correct - L* = 38
22 Partially correct 49 ms 4088 KB Output is partially correct - L* = 37
23 Partially correct 78 ms 4088 KB Output is partially correct - L* = 38
24 Partially correct 106 ms 4088 KB Output is partially correct - L* = 38
25 Partially correct 70 ms 4088 KB Output is partially correct - L* = 38
26 Partially correct 87 ms 4088 KB Output is partially correct - L* = 38
27 Partially correct 81 ms 4088 KB Output is partially correct - L* = 38
28 Partially correct 78 ms 4088 KB Output is partially correct - L* = 38
29 Partially correct 79 ms 4088 KB Output is partially correct - L* = 38
30 Partially correct 82 ms 4088 KB Output is partially correct - L* = 38
31 Partially correct 87 ms 4088 KB Output is partially correct - L* = 38
32 Partially correct 51 ms 4088 KB Output is partially correct - L* = 38
33 Partially correct 61 ms 4088 KB Output is partially correct - L* = 37
34 Partially correct 70 ms 4088 KB Output is partially correct - L* = 37
35 Partially correct 60 ms 4088 KB Output is partially correct - L* = 37
36 Partially correct 59 ms 4088 KB Output is partially correct - L* = 38
37 Partially correct 74 ms 4088 KB Output is partially correct - L* = 38
38 Partially correct 65 ms 4088 KB Output is partially correct - L* = 38
39 Partially correct 64 ms 4088 KB Output is partially correct - L* = 38
40 Partially correct 96 ms 4088 KB Output is partially correct - L* = 38