文章

211

粉丝

0

获赞

963

访问

32.5k

头像
将军的书 题解:二分 注意页数下标从0开始
P1118
发布于2026年3月9日 12:57
阅读数 46

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll binToDec(const string &s) { 
	if (s.empty()) 
		return 0; 
	ll res = 0; 
	for (char c : s)  
		res = res * 2 + (c - '0'); 
	return res; 
}
int main(){
	int n;
	while(cin >> n){
		ll m = (1 << n);
		vector<ll> books(m-1);
		string s;
		for(ll i=0;i<m-1;i++){
			cin >> s;
			books[i] = binToDec(s);
		}	
		sort(books.begin(),books.end());

		 // 二分查找
		ll left = 0, right = m-2, ans = m-1;  

		while (left <= right) {
			ll mid = left + (right - left) / 2;
			if (books[mid] != mid) {  // 缺失在左边或当前位置
				ans = mid;  // 缺失的数字是 mid
				right = mid - 1;  // 继续向左查找
			} else {
				left = mid + 1;  // 前半部分完整,向右查找
			}
		} 
		cout << ans << endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发