1 条题解

  • 0
    @ 2025-8-24 21:36:24

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 7wwwwth
    i am flesh and i am bone.

    搬运于2025-08-24 21:36:23,当前版本为作者最后更新于2018-08-11 16:05:49,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    #include<iostream>
    #include<cstdio>
    using namespace std;
    int t,n,a[100010],b[100010];
    /*
    找到二进制中最高位是1的数 确定次高位的时候只是从二进制最高位是1的数里选 以此类推 
    */
    int work(){
        cin>>n; 
        for (int i=1;i<=n;i++) cin>>a[i];
        for(int k=20;k>=0;k--){//最高有20位 
            int top=0; 
            for(int i=1;i<=n;i++) 
                if(a[i]&(1<<k)) b[++top]=a[i];//判断a[i]是否为1 
            if(top>1){
                for(int i=1;i<=top;i++) a[i]=b[i];
                n=top;
            }
        }
        return (a[1]&a[2]);
    }
    int main(){
        cin>>t;
        for (int i=1;i<=t;i++){
        	cout<<"Case #"<<i<<": "<<work()<<endl;
    	}
    }
    
    • 1

    信息

    ID
    2458
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者