\(\colorbox{green}{\color{Red}\Huge{为什么不会做啊啊啊我好菜啊啊啊啊啊}}\)
\(多模拟几个样例就会发现\)
\(f(x,y)运算前后,如果x有的某一位y也有,那么减y后消去\)
\(如果x某没有的某一位y有,那么减y后消去。\)
\(\color{Red}{他们的共性是,同一二进制位数出现多余1次就一定会被消掉}\)
\(当然,如果某一位二进制只出现一次也会被消掉,除非把它放在开头\)
\(没错,只有首元素是特殊的。找到最高位出现1次的数,放在开头,over()\)
#include <bits/stdc++.h>
using namespace std;
int n;
int a[100009],b[33];
void sovle(int j)
{
swap(a[1],a[j]);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
exit(0);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=32;i>=1;i--)
{
for(int j=1;j<=n;j++)
if( a[j]&(1<<(i-1)) ) b[i]++;
}
for(int i=32;i>=1;i--)
{
if(b[i]!=1) continue;
for(int j=1;j<=n;j++)
if(a[j]&(1<<(i-1))) sovle(j);
}
sovle(1);
}
原文链接: https://www.cnblogs.com/iss-ue/p/12923540.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/349853
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!