题解:P9509『STA - R3』Aulvwc

简化一下题意,对于原集合 SS,就是找原集合的两个子集 S1,S2S_1,S_2,使得 S1S2=S,S1S2=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=gii[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 左右,可以通过。

使用 Cloudflare Workers 自动获取必应每日壁纸
题解:P11140 [APC001] E - Linear Map

评论

评论加载中...