首页 > 其他分享 >CF1368题解

CF1368题解

时间:2023-12-02 10:00:12浏览次数:60  
标签:ch 题解 CF1368D while 按位 CF1368

CF1368

Codeforces Global Round 8

ABC略。

CF1368D

link

CF1368D题意

给定 \(n\) 个非负整数 \(a_1,\cdots,a_n\)。

你可以进行如下操作:选择两个不同的下标 \(i,j\) 满足 \(1\leq i,j\leq n\),并将 \(a_i\gets a_i\ \mathsf{AND}\ a_j,\ a_j\gets a_i\ \mathsf{OR}\ a_j\),两个赋值同时进行。AND 是按位与,OR 是按位或。

你可以进行任意次操作。求操作后所有数的平方和的最大值,即 \(\max \sum a_i^2\)。

CF1368D题解

首先观察这个操作,不难发现其实就是将一个数在二进制位中的 \(0\) 位尽可能用另一个数相同位置的 \(1\) 填入。
而且,因为是平方和最大,那么尽可能的填满一个数一定更优。
没了。

CF1368D代码

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int x = 0, f = 1;char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-') f = -1;ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
    return x * f;
}
const int maxn = 2e5 + 10;
int n, a[maxn];
int buc[30];
signed main(){
    n = read();
    for(int i = 1;i <= n;i++){
        a[i] = read();
        for(int j = 20;j + 1;j--)
            if(a[i] & (1 << j))buc[j]++;
        a[i] = 0;
    }
    long long sum = 0;
    for(int i = 1;i <= n;i++){
        for(int j = 20;j + 1;j--)
            if(buc[j]){a[i] |= (1 << j);buc[j]--;}
        sum += (long long)a[i] * a[i];
    }
    printf("%lld\n",sum);
    return 0;
}

标签:ch,题解,CF1368D,while,按位,CF1368
From: https://www.cnblogs.com/Call-me-Eric/p/17871284.html

相关文章

  • newstarctf2023 reverse 题解汇总
    newstarctf2023reverse题解汇总week1easy_REdie查无壳64直接IDA启动跟到main函数找到两部分flag拼起来就行了。flag{we1c0me_to_rev3rse!!}ELFdie查64ELFIDA启动稍微读一下写个py逆一下它的加密就行了flag{D0_4ou_7now_wha7_ELF_1s?}importbase64a="VlxRV......
  • ISCTFpwn的ezpie题解
    目前接触的随机好像都与地址有关,而且还有一个特性也就是只是基址随机,只要有任意一个地址就可以知道其他所有具体地址。(libc和pie保护)这里将通过ezpie这道题介绍绕过pie的一种方式,泄露地址一获取全部地址的方法。本人还不太懂partiallywrite的原理,就不误人子弟了。这里我们看到v5......
  • 【POJ 1144】Network 题解(Tarjan算法求无向图的割点)
    一家电话线公司(TLC)正在建立一个新的电话电缆网络。它们连接由1到N的整数编号的几个位置。没有两个地方的数字相同。这些线路是双向的,总是连接在两个地方,在每一个地方,线路都以电话交换机结束。每个地方都有一个电话交换机。从每个地方可以通过其他地方的线路到达,但不需要直接连接,可......
  • P9879 题解
    blog。找网络流水题写题解/hsh。间隔染色(\(i+j\)分奇偶染不同色)后,所有\(i+j\)为奇数的格子反色,题目的Pattern等价于是\(2\times2\)的全黑或全白格子。然后很自然地想Flow了。每个点分黑白两种状态。如果\((x,y)\)对应的Pattern有机会染成全黑,就连边\(S\xright......
  • 2023ISCTFpwn题目:stack题解
    这是我在这次比赛中遇到最有意思的一题,不仅让我看到了一种有意思的题型,而且让我开始看懂了pwndbg的调试界面。IDA里面是这样的,有直接可以提权的backdoor函数,有read函数,看似有点像ret2system。让我们分析一下这个函数的读入逻辑:首先让你输入一个size值,read会总共分size次读入一个字......
  • C#把listA通过“=”赋值给listB,然后对listA进行clear清空,第二个listB也清空了问题解决
    针对ArrayList赋值到另一个ArrayList的方法ArrayList<String>A=newArrayList<String>();A.add("1");A.add("2");ArrayList<String>B=newArrayList<String>();;B=A;A.clear();A清空后发现B也清空了。此时B对象相当与A对象的引用,而并不是将A对象的值单纯的传递给......
  • CF1705E Mark and Professor Koro 题解
    题意:给定一个长度为$n$$(1\len\le2e5)$的序列,每次可以把两个相等的$a_i$和$a_j$合并为一个$a_i+1$。给定$q$$(1\leq\le2e5)$次修改,每次将$a_k$修改为$l$,求每次操作后合并到无法再合并时出现的最大数。其中,$1\lea_i\le2e5$。......
  • 【ErikTse】2023-Codeforces新手训练营 第六期题解
    A.Wrath题目大意给你一个\(L\)数组和\(n\)个人,第\(i\)个人可以使用威力为\(L_i\)的闪电旋风劈击杀前面\(L_i\)人,问你最后能存活多少人?思路差分。开一个数组来标记当前威力的闪电旋风劈能击杀到的最远的人和使用技能的人,最远击杀的人所在的位置+1,自己的位置-1,这样算前缀和时所......
  • DBeaver连接PostgreSQL后只有默认数据库“postgres”不显示其他数据库的问题解决办法
    我们在使用DBeaver连接PostgreSQL后,发现数据库中只有“postgres”默认数据库,不显示我们自己创建的数据库。1、......
  • CF1896D Ones and Twos 题解
    题意:思路:先考虑不带修:如果长度为$n$的序列$a$中无$1$,当且仅当$2\les\lesum(1,n)$时,一定有解;否则,一定无解。通过$set$维护序列$a$中每个$1$的位置,找到最靠左的$1$的位置$l$以及最靠右的$1$的位置$r$。对于区间$[l,n]$,由......