首页 > 其他 > 详细

2020-09-23 刷题记录

时间:2020-09-24 10:01:33      阅读:38      评论:0      收藏:0      [点我收藏+]

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("");

2020-09-23 刷题记录

原文:https://www.cnblogs.com/nonameless/p/13722272.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!