标签:tmp 那么 idx val int 09 2020 cnt1 刷题
Anu Has a Function
思路:
\(f(x, y) = x | y - y\)。将 \(x, y\) 对齐。那么结果就是:如果 \(y\) 的第 \(i\) 是 \(1\),那么把 \(x\) 的第 \(i\) 位变为 \(0\)(无论之前是什么)。那么根据这个性质可以发现,改变的都是第 \(1\) 个数,后面其他数的顺序无影响。那么我们先预处理出每个位置上 \(1\) 的个数,然后枚举第一个数即可。
代码:
int n; cin >> n;
vector<int> a(n + 1), cnt1(32);
int idx, val = -1;
for(int i = 1; i <= n; i ++) cin >> a[i];
for(int i = 1; i <= n; i ++){
for(int j = 0; j < 32; j ++) if((a[i] >> j) & 1) cnt1[j] ++;
}
for(int i = 1; i <= n; i ++){
int tmp = 0;
for(int j = 0; j < 32; j ++)
if(((a[i] >> j) & 1) && cnt1[j] == 1)
tmp += (1 << j);
if(tmp > val){
val = tmp;
idx = i;
}
}
cout << a[idx] << " ";
for(int i = 1; i <= n; i ++) if(i != idx) cout << a[i] << " ";
puts("");
标签:tmp,那么,idx,val,int,09,2020,cnt1,刷题 来源: https://www.cnblogs.com/nonameless/p/13722272.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。