首页 > 其他分享 >【SSLOJ 3348】位运算

【SSLOJ 3348】位运算

时间:2024-11-16 14:19:29浏览次数:1  
标签:3348 SSLOJ 运算 非负 int 所有 样例 le10

题目大意

给定 \(n\)个非负整数,每次你可以选择两个数\(a,b\) ,将其中一个数变为 \(a\ and\ b\),另一个变为 \(a\ or\ b\),你可以进行多次操作,任何时候都可以停止,请最大化所有数的平方和。

输入格式
第一行包含一个正整数 \(n\)。

第二行包含 \(n\)个用空格分开的非负整数 \(a_i\)。

输出格式
一行一个非负整数表示最后最大化的所有数的平方和。

【输入样例】

5
1 2 3 4 5

【输出样例】

99

【样例解释】

一组最优方案是变成 \(7,0,7,0,1\),答案是 \(99\)。

对于\(100\%\)的数据,\(N\le10^5,a_i\le10^6\)

基本思路

位运算当然要在二进制下考虑啦。我们先随便拉两个数出来\((101010)_2\) 和\((110101)_2\) 最后操作完就是 \((111111)_2\) 和\((100000)_2\) 那么我们就发现了这个操作就是将一个数所有可以挪过去的 \(1\) 挪过去。

上过初中的都知道,\(a^2+b^2\le (a+b)^2\),所以我们把所有数摞起来,把所有 \(1\) 尽量往一个数上推就可以了。

核心代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int n,a,cnt[30];
ll ans;
int main(){
	freopen("andor.in","r",stdin);
	freopen("andor.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a;
		for(int j=0;j<=25;j++){
			if(a&(1<<j))
				cnt[j]++;
		}
	}
	for(int i=1;i<=n;i++){
		a=0;
		for(int j=0;j<=25;j++){
			if(cnt[j]>0){
				cnt[j]--;
				a|=(1<<j);
//				cout<<j<<":"<<a<<endl;
			}
		}
		ans+=1ll*a*a;
	}
	cout<<ans;
	return 0;
}

标签:3348,SSLOJ,运算,非负,int,所有,样例,le10
From: https://www.cnblogs.com/drlai/p/18549329

相关文章

  • 【SSLOJ 3347】动态逆序对
    题目大意给出一个长度为\(n\)的排列\(a\)。每次交换两个数,求逆序对数对\(2\)取模的结果。输入格式第一行一个正整数\(n\)。第二行\(n\)个数,表示给出的排列\(a\)。第三行一个正整数\(q\)。接下来\(q\)行,每行两个正整数,表示交换\(a_i\)和\(a_j\)。输出格式输出......
  • 我谈二值形态学基本运算——腐蚀、膨胀、开运算、闭运算
    Gonzalez从集合角度定义膨胀和腐蚀,不易理解。Throughthesedefinitions,youcaninterpretdilationanderosionasslidingneighborhoodoperationsanalogoustoconvolution(orspatialfiltering).禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息......
  • 软件测试笔记|Python自动化测试|python中的数值运算有何特点?
    一、类型方面特点1.类型丰富:支持整数(int)、浮点数(float)、复数(complex)等多种数值类型。2.动态类型:声明变量时无需指定类型,运行时确定类型。二、精度相关特点1.整数精度:整数类型不会溢出,可处理任意大小整数,受机器内存限制。2.浮点数精度:通常用双精度浮点数表示,符合IEEE7......
  • Rust ?(Rust错误传播运算符?)(用于简化错误处理,自动将错误从函数中返回)(可恢复错误Result<T
    文章目录Rust错误传播运算符:深入理解与应用1.错误处理的基础1.1`Result`枚举1.2`Option`枚举2.错误传播运算符(`?`)2.1基本语法2.2工作原理1.检查返回值2.提取`Ok`值2.3错误传播示例3.错误传播与自定义错误类型(没仔细看)3.1定义自定义错误类型3.2自定义......
  • 两个新出的 JavaScript 运算符
    在ECMAScript2021(ES12)中,JavaScript引入了新的逻辑赋值操作符&&=和??=。这些操作符将逻辑运算符与赋值运算符相结合,提供了更加简洁、直观的赋值方式。虽然已经进入标准比较久了,但是我在实际开发中见到的还比较少,今天我们一起来学习下。逻辑与赋值操作符&&=&&=的工作原理......
  • 【题解】洛谷P11186: 三目运算
    不好玩!!!这是个树形结构,直接暴力模拟,但过不去,但是需要发现答案是个区间,我们对字符串处理时记录最大值最小值,然后到叶子节点时我们将此时的区间存起来,查询时直接二分查询这个数对于的区间就可以了。总结:不好玩!!!#include<bits/stdc++.h>usingnamespacestd;#definelllonglon......
  • 位运算例子
    嵌入式C语言位操作的一些常见用法归纳一、常用的方法借鉴野火STM32开发板教程中的内容1.变量的某位清零//定义一个变量a=10011111b(二进制数)unsignedchara=0x9f;//对bit2清零a&=~(1<<2);//括号中的1左移两位,(1<<2)得二进制数:00000100b//按位取反,~(1......
  • 初识算法 · 位运算(2)
    目录前言:判定字符是否唯一丢失的数字比特位计数只出现一次的数字III前言:​本文的主题是位运算,通过四道题目讲解,一道是判断字符是否唯一,一道是只出现一次的数字III,一道是比特位计数,一道是丢失的数字。链接分别为:338.比特位计数-力扣(LeetCode) 面试题01.01.判定字......
  • 数据类型和运算符
    数据类型动态类型编程语言运行时判断静态类型的编程语言:Go、C、在开发的时候,就需要给一些定义的变量赋值空间大小。C需要自己去开辟这个空间数据类型:每种在Go语言中出现的基本数据类型,会有一个默认的空间大小。1、布尔类型数据布尔型的值只可以是常量true或者......
  • ECMAScript 安全赋值运算符 (?=) 提案介绍及其 Polyfill
    本文介绍最新的ECMAScript安全赋值运算符提案以及相应的替代实现前言我们经常会跟try/catch打交道,但如果你写过Go或者Rust就会发现在这两种语言中是没有try/catch的,那么这些语言怎么进行错误捕获呢Go:Errorhandlingf,err:=os.Open("filename.ext")iferr......