Codeforces Round #195 (Div. 2) C. Vasily the Bear and Sequence

来源:互联网 发布:echarts饼图显示数据 编辑:程序博客网 时间:2024/04/29 15:06

啊啊啊啊啊啊

一开始想错了,以为只能是某一个数取并之后 必须得到一个 2的某次方   其实比如第三组数据 

3

1 20 22

输出

2

20 22  (取并以后是20    20%4==0   oh  fuck!)

意思应该是得到一个2的某次方的倍数就可以了。

思路:枚举每一位上的1。看这一位上的  1   是否可以满足条件。

当然   只要这个数的该位是1   就可以用来并   因为题目是要越多越好  而且越多的话也不会改变什么   有0的地方  再多的数也是0

#include <iostream>#include <cstdio>#include <cstring>#include <vector>using namespace std;vector <int> ans;int n;int X[100005];int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    scanf("%d",&X[i]);    for(int i=30;i>=0;i--)    {        ans.clear();        int tmp=-1;        for(int j=1;j<=n;j++)        {            if(X[j]&(1<<i))            {                ans.push_back(X[j]);                if(tmp==-1)tmp=X[j];                else tmp&=X[j];            }        }        if(tmp%(1<<i)==0)break;    }    printf("%d\n%d",ans.size(),ans[0]);    for(int i=1;i<ans.size();i++)    printf(" %d",ans[i]);    puts("");    return 0;}


原创粉丝点击