Codeforces Round #613 (Div. 2) D - Dr. Evil Underscores(思維,位運算)


🥑 🥑 🥑

題意:對於一個數組,求一個數字與數組每個元素異或之后的最大值最小,求這個最大值

又是位運算,,題目給出數組元素范圍在2^30以內,二進制最多30位,從最高位開始貪心,如果此位置的數組元素有的是1有的是0,最后肯定取1,否則取0,還有就是分組討論,因為每個bit位只能滿足原數組中一部分元素異或后為1

#define int ll
vector<int>a;
int solve(vector<int>v,int bit)
{
	if(bit<0||v.size()==0) return 0;
	vector<int>zero,one;
	rep(i,v.size())
	{
		if((v[i]>>bit)&1==1) zero.push_back(v[i]);
		else one.push_back(v[i]);
	}
        if(one.size()==0) return solve(zero,bit-1);
	if(zero.size()==0) return solve(one,bit-1);
	return (min(solve(one,bit-1),solve(zero,bit-1))|1<<bit);
}
signed main()
{
	int n;cin>>n;
	a.resize(n);cin>>a;
	cout<<solve(a,30)<<endl;
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM