提出 #42959371


ソースコード 拡げる

// LUOGU_RID: 113310813
#include <bits/stdc++.h>
#define SZ(x) (int) x.size() - 1
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> void chkmax(T& x, T y) { x = max(x, y); }
template <typename T> void chkmin(T& x, T y) { x = min(x, y); }
template <typename T> void read(T &x) {
	x = 0; int f = 1; char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
	for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
	x *= f;
}
const int N = 2e5 + 10;
int n, a[N], t[N * 33][2], tot = 1, sz[N * 33], s;
void insert(int x) {
	int num = 1; sz[1]++;
	DF(i, 30, 0) {
		int k = (x >> i) & 1;
		// if (i == 8) cout << k << '\n';
		if (!t[num][k]) t[num][k] = ++tot;
		num = t[num][k];
		sz[num]++;
	}
}
int query(int num1, int num2, int d, int x) {
	if (!num1 || !num2) return 0;
	if (d < 0) return min(sz[num1], sz[num2]);
	if (x & (1 << d)) return query(t[num1][0], t[num2][1], d - 1, x) + query(t[num1][1], t[num2][0], d - 1, x);
	int a = query(t[num1][0], t[num2][0], d - 1, x), b = query(t[num1][1], t[num2][1], d - 1, x);
	// cout << "# " << d << " " << a << " " << b << endl;
	// if (sz[t[num1][0]] - a < sz[t[num2][1]] - b && )
	return a + b + min(sz[t[num1][0]] - a, sz[t[num2][1]] - b) + min(sz[t[num1][1]] - b, sz[t[num2][0]] - a)
	+ max(0, min(a, min(sz[t[num2][1]] - b - (sz[t[num1][0]] - a), sz[t[num1][1]] - b - (sz[t[num2][0]] - a))))
	+ max(0, min(b, min(sz[t[num1][0]] - a - (sz[t[num2][1]] - b), sz[t[num2][0]] - a - (sz[t[num1][1]] - b))));
}
int dp(int num, int d, int x) {
	if (!num) return 0;
	assert(d >= 0);
	// if (d == 0) return sz[num];
	// cout << "! " << d << " " << (x & (1 << d)) << " " << d << " " << num << " " << t[num][0] << " " << t[num][1] << " " << sz[t[num][0]] << " " << sz[t[num][1]] << endl;
	if (x & (1 << d)) return sz[num] - 2 * query(t[num][0], t[num][1], d - 1, x);
	int ls = dp(t[num][0], d - 1, x), rs = dp(t[num][1], d - 1, x);
	if (sz[t[num][0]] < rs) return rs - sz[t[num][0]];
	if (ls > sz[t[num][1]]) return ls - sz[t[num][1]];
	return 0;
}
bool check(int x) {
	int ans = dp(1, 30, x);
	// cout << sz[1] << " " << ans << endl;
	return ans <= ((n / 2) * 2);
}
signed main() {
	read(n);
	F(i, 1, 2 * n) {
		read(a[i]);
		insert(a[i]);
	} int l = 0, r = (1 << 30);
	// cout << check(8) << endl; return 0;
	while (l + 1 < r) {
		int mid = (l + r) >> 1;
		if (check(mid)) l = mid;
		else r = mid;
	} cout << l;
	return 0;
}

提出情報

提出日時
問題 G - Max of Medians
ユーザ ast123
言語 C++ (GCC 9.2.1)
得点 625
コード長 2608 Byte
結果 AC
実行時間 794 ms
メモリ 35984 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 625 / 625
結果
AC × 3
AC × 56
セット名 テストケース
Sample sample00.txt, sample01.txt, sample02.txt
All sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt, testcase43.txt, testcase44.txt, testcase45.txt, testcase46.txt, testcase47.txt, testcase48.txt, testcase49.txt, testcase50.txt, testcase51.txt, testcase52.txt
ケース名 結果 実行時間 メモリ
sample00.txt AC 12 ms 3476 KiB
sample01.txt AC 2 ms 3464 KiB
sample02.txt AC 7 ms 3556 KiB
testcase00.txt AC 4 ms 3400 KiB
testcase01.txt AC 2 ms 3496 KiB
testcase02.txt AC 2 ms 3428 KiB
testcase03.txt AC 24 ms 4276 KiB
testcase04.txt AC 23 ms 4212 KiB
testcase05.txt AC 684 ms 35924 KiB
testcase06.txt AC 738 ms 35928 KiB
testcase07.txt AC 791 ms 35832 KiB
testcase08.txt AC 689 ms 35984 KiB
testcase09.txt AC 741 ms 35924 KiB
testcase10.txt AC 794 ms 35904 KiB
testcase11.txt AC 27 ms 4332 KiB
testcase12.txt AC 25 ms 4200 KiB
testcase13.txt AC 152 ms 15860 KiB
testcase14.txt AC 174 ms 16860 KiB
testcase15.txt AC 158 ms 16156 KiB
testcase16.txt AC 179 ms 16904 KiB
testcase17.txt AC 156 ms 15928 KiB
testcase18.txt AC 177 ms 16924 KiB
testcase19.txt AC 173 ms 16660 KiB
testcase20.txt AC 181 ms 16864 KiB
testcase21.txt AC 159 ms 16248 KiB
testcase22.txt AC 184 ms 17064 KiB
testcase23.txt AC 180 ms 16984 KiB
testcase24.txt AC 183 ms 16964 KiB
testcase25.txt AC 163 ms 16236 KiB
testcase26.txt AC 169 ms 17012 KiB
testcase27.txt AC 184 ms 16840 KiB
testcase28.txt AC 208 ms 19284 KiB
testcase29.txt AC 283 ms 18028 KiB
testcase30.txt AC 210 ms 18340 KiB
testcase31.txt AC 204 ms 18036 KiB
testcase32.txt AC 211 ms 17376 KiB
testcase33.txt AC 19 ms 4244 KiB
testcase34.txt AC 17 ms 4272 KiB
testcase35.txt AC 18 ms 4288 KiB
testcase36.txt AC 19 ms 4224 KiB
testcase37.txt AC 20 ms 4192 KiB
testcase38.txt AC 19 ms 4292 KiB
testcase39.txt AC 35 ms 5040 KiB
testcase40.txt AC 36 ms 5124 KiB
testcase41.txt AC 31 ms 5104 KiB
testcase42.txt AC 38 ms 4972 KiB
testcase43.txt AC 35 ms 4836 KiB
testcase44.txt AC 34 ms 5100 KiB
testcase45.txt AC 595 ms 34788 KiB
testcase46.txt AC 623 ms 35916 KiB
testcase47.txt AC 582 ms 34152 KiB
testcase48.txt AC 619 ms 35916 KiB
testcase49.txt AC 586 ms 33896 KiB
testcase50.txt AC 632 ms 35904 KiB
testcase51.txt AC 567 ms 33292 KiB
testcase52.txt AC 633 ms 35976 KiB