H. Binary Median

Posted streamazure

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了H. Binary Median相关的知识,希望对你有一定的参考价值。

H. Binary Median

题意:给定(n)(m),及(n)个二进制数,在由0到(2^m-1)(2^m)个二进制数中删掉这(n)个数,求剩余二进制数的中位数。

LL trans(char s[]) {
	int len = strlen(s);
	int j=0;
	LL ans=0;
	while (s[j] != ‘‘) {
		ans += (s[j] - ‘0‘) * pow(2, len - j - 1);
		j++;
	}
	return ans;
}

vector<LL> v;
void solve(){
	v.clear();
	int n, m;
	cin >> n >> m;
	LL BS = (1LL << (m - 1));//直接找未删元素时的中位数
	for (int i = -128; i < 128; i++) v.push_back(BS + i);
	//再找出中位数左右两边的各128个数字
	LL x;
	for (int i = 0; i < n; i++) {
		char s[100];
		cin >> s;
		x = trans(s);
		//cout << x << endl;
		if (x < v[0]) v.erase(v.begin());
		else if (x > v.back()) v.erase(v.end() - 1);
		else v.erase(find(v.begin(), v.end(), x));
	}
	x = v[(v.size() - 1) / 2];
	//容器内剩余元素的中位数就是答案
	//转换为二进制输出
	for (int i = m - 1; i >= 0; i--) {
		if (x & (1LL << i)) cout << "1";
		else cout << "0";
		//x&(1<<i)的作用是取出x在二进制下的第i位
	}
	cout << endl;
}

以上是关于H. Binary Median的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #644 (Div. 3) H. Binary Median

Codeforces Round #644 (Div. 3) H. Binary Median

CF1360H Binary Median

Codeforces 1360H - Binary Median (二分)

Codeforces 1360H - Binary Median (二分)

4. Median of Two Sorted Arrays