[codeforces 1285D] Dr. Evil Underscores 不定长数组+分治算法+位运算
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1285/problem/D
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
D - Dr. Evil Underscores | GNU C++11 | Accepted | 296 ms | 17100 KB |
容易理解的算法,大都效率要低些。
//不定长数组+分治算法+位运算
//思路同该文https://www.cnblogs.com/CADCADCAD/p/12179509.html
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v;
int n;
int dfs(int bit,vector<int> &v){
vector<int> v0,v1;
int i;
if(bit<0)return 0;
for(i=0;i<v.size();i++)
if((v[i]>>bit)&1)v1.push_back(v[i]);//此处错写成if((v[i]>>bit)&&1)v1.push_back(v[i]);
else v0.push_back(v[i]);//此处错写成else v0.push_back(v[0]);
if(v1.size()==0)return dfs(bit-1,v0);
else if(v0.size()==0)return dfs(bit-1,v1);
else return min(dfs(bit-1,v1),dfs(bit-1,v0))+(1<<bit);
}
int main(){
int i,a;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a),v.push_back(a);
printf("%d\n",dfs(30,v));
return 0;
}