位位运算
思路
观察一下题中所说的“将其中一个数变为
题目要求使所有数的平方和最大,显然在
可能会有人对操作中的“交换第
代码
#include<bits/stdc++.h>
#define MAXN 100010
#define int long long
using namespace std;
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;
}
inline void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
bool cmp(int a,int b)
{
return a>b;
}
int n,num[MAXN],vis[MAXN],ans=0;
int wei(int x)
{
int ans=0;
while(x)
{
x>>=1;
ans++;
}
return ans;
}
string to_b(int x)
{
string ans;
while(x)
{
ans+=(x%2+'0');
x>>=1;
}
if(ans.length()==0)ans+='0';
reverse(ans.begin(),ans.end());
return ans;
}
signed main()
{
n=read();
for(int i=1;i<=n;i++)
num[i]=read();
sort(num+1,num+n+1,cmp);
int len=wei(num[1]);
for(int i=len-1;i>=0;i--)
{
int l=1,r=n;
while(1)
{
while(l<r&&(num[l]&(1<<i)))l++;
while(l<r&&(!(num[r]&(1<<i))))r--;
if(l>=r)break;
num[l]|=(1<<i);
num[r]-=(1<<i);
}
}
for(int i=1;i<=n;i++)
ans+=num[i]*num[i];
write(ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】