zoukankan      html  css  js  c++  java
  • CF336C-Vasily the Bear and Sequence题解--贪心

    题目链接

    https://www.luogu.org/problemnew/show/CF336C

    分析

    一个比较妙的贪心

    我们要让最后(and)起来的数被(2^k)整除且(k)最大,我们不妨从后往前枚举(k),同时运用贪心的思路,对于二进制第(k)为1的数,我们想让最后得到的数除第(k)位外都为0,当然是(and)越多越好

    代码

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cctype>
    #include <queue>
    #include <bitset>
    #define ll long long 
    #define ri register int 
    using std::min;
    using std::max;
    template <class T>inline void read(T &x){
        x=0;int ne=0;char c;
        while(!isdigit(c=getchar()))ne=c=='-';
        x=c-48;
        while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
        x=ne?-x:x;return ;
    }
    const int maxn=100005;
    const int inf=0x7fffffff;
    int a[maxn],n,q[maxn];
    int main(){
        int x,y,z;
        int ans=0;
        read(n);
        for(ri i=1;i<=n;i++){
            read(a[i]);
        }
        for(ri k=30;k>=0;k--){
            x=(1<<k);
            y=x-1;
            ans=0;
            for(ri i=1;i<=n;i++){
                //printf("%d %d
    ",a[i],x);
                if(a[i]&x){
                    y=y&a[i];
                    q[++ans]=a[i];
                }
            }
            if(y==0){
                printf("%d
    ",ans);
                for(ri i=1;i<=ans;i++){
                    printf("%d ",q[i]);
                }
                puts("");
                return 0;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    《算法导论》读书笔记
    【原创】POI操作Excel导入导出工具类ExcelUtil
    10-JMM
    09-字节码执行引擎
    08-类加载机制
    07-前端编译与优化(待补充)
    06-字节码指令
    05-类文件结构
    04-垃圾回收(2)
    03-垃圾回收(1)
  • 原文地址:https://www.cnblogs.com/Rye-Catcher/p/9627572.html
Copyright © 2011-2022 走看看