惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
小众软件
小众软件
S
SegmentFault 最新的问题
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
C
Check Point Blog
S
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
罗磊的独立博客
有赞技术团队
有赞技术团队
V
V2EX
Y
Y Combinator Blog
博客园 - 叶小钗
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Fortinet All Blogs
W
WeLiveSecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
S
Security @ Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
MyScale Blog
MyScale Blog
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
PCI Perspectives
PCI Perspectives
H
Heimdal Security Blog
Schneier on Security
Schneier on Security
Security Latest
Security Latest
AWS News Blog
AWS News Blog
月光博客
月光博客
Security Archives - TechRepublic
Security Archives - TechRepublic
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
博客园 - Franky
Cisco Talos Blog
Cisco Talos Blog
T
Threat Research - Cisco Blogs
M
MIT News - Artificial intelligence
T
Troy Hunt's Blog
N
News and Events Feed by Topic
Cloudbric
Cloudbric
Scott Helme
Scott Helme
云风的 BLOG
云风的 BLOG
Attack and Defense Labs
Attack and Defense Labs

AirTouchの小站

DNSMgr——聚合管理所有域名DNS解析+自动续签SSL证书并部署 | AirTouchの小站 雨云香港服务器简单测评 | AirTouchの小站 七牛云 AI 狂送 token 实测到底怎么样 | AirTouchの小站 记一次博客被攻击 | AirTouchの小站 给你的 Artalk 评论区配置验证码和垃圾评论检测 | AirTouchの小站 抓紧上车!免费 E3 开发者账号又来了! | AirTouchの小站 Vercel & Cloudflare Worker 项目推荐(2) | AirTouchの小站 用 Zmail 搭建自己的临时邮箱 | AirTouchの小站 IPv6反解域名?手把手带你搞 | AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 macOS Tahoe 26中Electron架构卡顿的临时解决方案 | AirTouchの小站 用Obsidian插件增强Stellar写作体验 | AirTouchの小站 复习一下最小生成树 | AirTouchの小站 2025苹果秋季发布会亮点总结 | AirTouchの小站 分享几个artalk邮件通知模板 | AirTouchの小站 博客的图片应该存哪啊? | AirTouchの小站 Pic Smaller——自部署压缩图片的利器 | AirTouchの小站 企业微信的自定义域名邮箱太香了 | AirTouchの小站 所有道听途说,终获眼见为实 | AirTouchの小站 修复Vercel部署hexo导致文章的更新时间错误 | AirTouchの小站 jsDelivr国内公益加速镜像分享 | AirTouchの小站 搭建自己的busuanzi访问量统计服务 | AirTouchの小站 用Vercel和Netlify反代你的网站 | AirTouchの小站 用EdgeOne配置反向代理 丢掉丑陋的端口号 | AirTouchの小站 拼好鸽香港4区nat机器:月付3.5还要啥自行车! | AirTouchの小站 博客的新域名——xsl.im | AirTouchの小站 如何搭建自己的EdgeOne优选域名 | AirTouchの小站 用EdgeOne加速CloudflareR2存储桶 | AirTouchの小站 EdgeOne自动化上传证书并部署 | AirTouchの小站 你需要把PicGo换成PicList了! | AirTouchの小站 Cursor屏蔽中国大陆?给你解决方案! | AirTouchの小站 使用 Cloudflare Workers 自动获取必应每日壁纸 | AirTouchの小站 题解:P11140 [APC001] E - Linear Map | AirTouchの小站 Phira多人联机服务器搭建&使用教程 | AirTouchの小站 腾讯云EdgeOne免费CDN加速你的网站 | AirTouchの小站 Hexo 博客收录指南 | AirTouchの小站 题解:P12646 [KOI 2024 Round 1] 升序 | AirTouchの小站 Cloudflare CDN优选IP加速你的网站 | AirTouchの小站 Giffgaff在线生成esim二维码 | Giffgaff sim转eSIM指南 | AirTouchの小站 AirTouchの小站 AirTouchの小站 Hexo Stellar 主题装修笔记 | AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站
题解:P9509『STA - R3』Aulvwc | AirTouchの小站
AirTouch, me@airtouch.top · 2025-07-15 · via AirTouchの小站

www.luogu.com.cn

https://www.luogu.com.cn/problem/P9509

简化一下题意,对于原集合 SS,就是找原集合的两个子集 S1,S2S_1,S_2,使得 S1∪S2=S,S1∩S2=∅S_1 \cup S_2 = S,S_1 \cap S_2 = \emptyS1,S2S_1,S_2 的平均数等于 SS 的平均数

注意到特殊性质中的 ∑ai=0\sum a_i = 0,这个很好写,分成一个正集合和一个负集合,每个跑一个可行性背包 f,gf,gfi,gif_i,g_i 表示 S1,S2S_1,S_2 中能否存在 ii,如果 fi=gi,i∈[1,f_i = g_i,i \in [1, ∑aj2\sum a_j \over 2 (aj>0))(a_j > 0)),那么S1,S2S_1,S_2 的平均数等于 SS 的平均数

考虑把整体情况转化,把 aia_i 减掉平均数,那么 ∑ai=0\sum a_i = 0,这样就成了特殊性质。按照特殊性质的方法处理就行。

但时间复杂度是 O(n2k)O(n^2k)(kk 是值域,题中为 5×1035\times 10^3),大约是个 5×1095 \times 10^9,会炸,考虑用 bitset 优化可行性背包,f = f|=(f<<a_i),时间复杂度优化到了 10810^8 左右,可以通过。

cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int n,a[N];
bitset<2500000> fp,fn;
void solve(){
	int sum=0,agv=0;
	fp=fn=0;
	vector<int> nn,pp;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],agv+=a[i];
	if(agv%n!=0){
		puts("No");
		return;
	}
	agv/=n;
	for(int i=1;i<=n;i++){
		a[i]-=agv;
		if(a[i]==0){
			puts("Yes");
			return;
		}
		(a[i]>0?pp:nn).push_back(abs(a[i]));
		sum+=(a[i]>0?a[i]:0);
	}
	fp[0]=fn[0]=1;
	for(int x:pp) fp|=(fp<<x);
	for(int x:nn) fn|=(fn<<x);
	fp[sum]=fn[sum]=fp[0]=fn[0]=0;
	puts(((fp&fn)!=0?"Yes":"No"));
}
signed main(){
	cin.tie(0)->ios::sync_with_stdio(0);
	int q;cin>>q;
	while(q--) solve();
	return 0; 
}