ABC 384 F
ABC 384 F
abc 经典 EF 出式子题。
问题陈述
对于正整数
已知长度为
做法
首先原式可以转化为算
这是个经典的trick。
然后这个式子不是很好算贡献。
我们将其写为:
其中
将
设
原式等于
考虑如何计算
我们可以先计算一个
这个非常好算,
具体来说,枚举
然后我们发现
证明也是显然的。
在所有因数含有
于是就做完了。
// Problem: F - Double Sum 2
// Contest: AtCoder - Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
// URL: https://atcoder.jp/contests/abc384/tasks/abc384_f
// Memory Limit: 1024 MB
// Time Limit: 4000 ms
// Author: Eason
// Date:2024-12-14 20:34:44
//
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define re register
#define int ll
#define PII pair<int,int>
#define rep(k,a,b) for (int k = a;k <= b;k++)
#define adde(a,b) v[a].push_back(b)
#define addev(a,b,c) v[a].push_back({b,c});
#define rd read
int read()
{
int f=1,k=0;char c = getchar();
while(c <'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')k=(k<<1)+(k<<3)+(c^48),c=getchar();
return k*f;
}
const int N = 2e5+5,M = 5e7 +5;
int pw2[30];
int n;
int a[N];
int sum[30];
int cnt[M];
int ct[M];
int tp[N];
void solve()
{
cin >> n;
rep(i,1,n) tp[i] = a[i] = rd();
for (int i = 25;i >= 0;i--)
{
int mm = (1<<i);
rep(i,0,mm) cnt[i] = ct[i] = 0;
for (int i =1;i <= n;i++) a[i] = tp[i] % mm,cnt[a[i]]+=tp[i],ct[a[i]]++;
for (int j = 1;j < mm;j++)
{
if (ct[j] && ct[mm-j])
sum[i] += cnt[j]*ct[mm-j] + ct[j]*cnt[mm-j];
}
if (ct[0])
sum[i] += cnt[0] *ct[0]*2;
}
int ans = 0;
for (int i = 25;i >= 0;i--)
{
ans += (sum[i]-sum[i+1])/(1<<i);
}
int S = 0;
for (int i = 1;i <= n;i++)
{
int cnt = 0;
int x = tp[i];
while (x %2 == 0) cnt++,x/=2;
ans -= x;
S += x;
}
ans /=2;
ans += S;
cout << ans << endl;
}
signed main()
{
int t;t = 1;
while(t--)
{
solve();
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!