首页 > 其他分享 >P9612 [CERC2019] Light Emitting Hindenburg 题解

P9612 [CERC2019] Light Emitting Hindenburg 题解

时间:2024-02-02 16:35:04浏览次数:36  
标签:tmp cnt int 题解 29 Hindenburg P9612 pd MAX

题目传送门

题目大意

这个题目简化一下就是求 \(n\) 个数中取 \(k\) 个数按位与的最大值

思路

很容易想到贪心。

题中说道输入的数在二进制下最多 \(29\) 位,所以我们从 \(29\) 开始遍历二进制位,如果当前位有大于等于 \(k\) 个 \(1\),那么标记一下这些数,可以发现剩下的比当前位低的二进制位和无法大于当前位,所以必选当前位。最后再遍历时只需要考虑这些打过标记的数即可。

另外我们还需要知道如何取出整数 \(n\) 在二进制下的第 \(k\) 位:

\[(n>>k)\&1 \]

代码

#include<bits/stdc++.h>
#define MAX 200005
#define int long long
using namespace std;
int n,k,a[MAX],cnt,ans,tmp;
bool pd[MAX];
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i];
    memset(pd,1,sizeof(pd));
    for(int i=29;i>=0;i--){
        cnt=0;
        for(int j=1;j<=n;j++){
            tmp=(a[j]>>i)&1;
            if(pd[j]&&tmp)cnt++;
        }
        if(cnt>=k){
            for(int j=1;j<=n;j++){
                tmp=(a[j]>>i)&1;
                if(pd[j]&&!tmp)pd[j]=0;
            }
            ans+=(1<<i);
        }
    }
    cout<<ans<<'\n';
    return 0;
}

标签:tmp,cnt,int,题解,29,Hindenburg,P9612,pd,MAX
From: https://www.cnblogs.com/MithrilSwordXIV/p/18003407

相关文章

  • AcWing 3721. 求30的倍数 题解
    传送门stoi这里我们来了解一个函数\(stoi\)作用是将\(n\)进制的字符串转化为十进制,使用时包含头文件\(string\)定义如下:intstoi(conststd::string&str,std::size_t*pos=nullptr,intbase=10);参数:\(str\)-待转换的字符\(pos\)-其取值可以是一个空字......
  • CF1687D Cute number 题解
    题目链接点击打开链接题目解法一个数\(c\)是可爱(下文称为合法)的,当且仅当\(c\in[x^2,x(x+1)]\)令\(a_i\)属于\([x_i,x_i(x_i+1)]\)一个显然的范围是\(x_1\le2\times10^6\)考虑枚举\(x_1\)现在说明一个结论:\(x_1\)固定时,\(x_i\)也固定了说明:不难发现,合法的不合......
  • CF620E New Year Tree 题解
    题目链接:CF或者洛谷这题很简单,看到颜色数,HH的项链?树,树上的HH的项链?带修,树上的镜中的昆虫?\(c_i\le60\),噢,easy了。考虑一类信息,表示有和无,对于某种颜色来讲,\(0/1\)表示无或者有,而或运算让我们从小区间的有无情况反映到大区间的有无情况。一种暴力的想法,为每种颜色建立一棵有......
  • CF125D 题解
    思路首先可以发现前三个数中的两个数一定为一个等差数列中,所以我们对于前三个数枚举哪两个数是一个等差数列中的,设这两个数的差为\(w\),在原数列中找到一个最长的公差为\(w\)的等差数列,记为\(A\),剩下的数记为\(B\),此时有三种可能。\(|B|=0\),此时可以知道原数组就是等差数列......
  • mozhe靶场: WebShell文件上传漏洞分析溯源(第5题) 题解(使用哥斯拉)
    哥斯拉由java编写,可以在linux上使用.个人认为比冰蝎好用,用冰蝎连不上这个靶场,但是哥斯拉可以连的上.github搜哥斯拉就能下载首先登陆后台,弱口令adminadmin点击添加文章,尝试上传一句话木马(一句话木马可以点击哥斯拉的生成)webshell.asp<%evalrequest("pass")%>......
  • P3356 火星探测题解
    part1费用流建图比较显然,把车的数量当成流量,把捡到的石头数量当成费用。然后跑最大费用最大流。因为费用是针对点而不是边,所以要拆点,每个点分为入点和出点。对于向下走,向右走建边:从起点的出点向终点的入点连边,容量为\(inf\),费用为\(0\)。对于每一个格子,如果当前格子是石头......
  • AT_abc243_g [ABC243G] Sqrt 题解
    可设\(f_i\)为以\(i\)开头的方案数,由于最后由于操作数很多所以不用考虑还剩多少次操作,显然可得状态转移方程\(f_i=\sum\limits_{j=1}^{\sqrti}f_j\),时间复杂度\(O(T+X\sqrtX)\),空间复杂度\(O(X)\),无法接受。考虑如何更优,可以发现在\(T\)次询问中,每次可以直接转移,因此......
  • UVA12032 题解
    题意原题面一堆废话,其实这道题很简单。\(T\)组数据,每组数据给定你一个长度为\(n\)的序列\(a_1...a_n\),在定义\(a_0\)为\(0\)的情况下,假设\(k\)为你的力量系数,在\(\foralli\inn\)时\(a_i-a_{i-1}\lek\),且在按顺序\(1-n\)进行判断时,如果\(a_i-a_{i-1}=k\)......
  • 一般图最小匹配 题解
    首先进行排序,显然只有排序后相邻两个元素匹配才有可能成为答案。我们设\(b_i=a_i-a_{i-1}\),则问题转化为:在\(b\)数组中选\(m\)个数(显然一个\(b\)),两两不能相邻,求这些数和最小值。就和这道题一模一样了,使用反悔贪心。具体的,我们可以将所有\(b_i\)放进小根堆里,每次取出......
  • PMP-6.8 控制资源--问题解决
    一、控制资源基础内容 0.涉及领域:资源管理计划资源管理计划为如何使用、控制和最终释放实物资源提供指南。1.控制资源阶段需参照文档(1)问题日志问题日志用于识别有关缺乏资源、原材料供应延迟,或低等级原材料等问题。(2)经验教训登记册在项目早期获得的经验教训可......