首页 > 其他分享 >UNR #7 补题

UNR #7 补题

时间:2023-08-06 20:24:23浏览次数:32  
标签:UNR 变量 一个 sum 补题 可以 考虑 节点

意识流题解。

那些你不要的

场上写了一个二分答案 + 栈模拟,实在是太蠢了!

观察到每次一定会删一个奇数位的和一个偶数位的,最后只有一个奇数位的会保留下来,然后就完了。

比特迷宫

场上写了一个乱搞:每 \(24\) 个分一块,对于每块跑出一个最优解。然后把相差 \(2^k\) 的相同操作不断合并。

这样在随机数据下比较优秀,但不能过 hack. 加了 1000 次随机打乱,结果有一个 Hack 超了 300 次。

实际上应该可以构造到小于 \(160000\) 量级的?但是我不会.


官方题解的确定性做法:

将所有状态 \(S\) 按 popcount 从高到低处理。

核心观察:如果 flip 了 \(S\) 位置,那么设 \(T\) 为 \(S\) 去掉某一个 1 位(\(S\ \text{and}\ T = T\)),那么翻转一下 \(S\) 可以同时翻转任意若干个的 \(T\)。

实现上只需要把 \(S\) 的若干个 \(1\) 去掉得到 \(A\),执行 \((A,S-A)\) 即可。

若 \(S\ \text{and}\ T = T\) 称 \(S\) 能覆盖 \(T\).

那么问题可以转化为,对于 popcount \(=k\) 的所有 \(S\),选取一个覆盖集,使得能覆盖所有 popcount \(=k-1\) 的所有 \(T\)。

接下来贪心搞一搞,就可以得到总数为 \(157884\) 的覆盖集。

璀璨宝石

80 分做法:

考虑把答案表示成 \(\max(A,B,C,D,E,\lceil sum/2 \rceil)\),这也是第一直觉的想法。

枚举某一个颜色作为最大值,可以求出 \(A/B/C/D/E\) 作为最大值的方案。

但是怎么求 \(\lceil sum/2 \rceil\) 能否取到最大值呢,可以转成计数,数出 \(sum\) 的总方案数减去 \(A/B/C/D/E\) 作为最大值的方案数,如果方案数 \(>0\) 就可行。

这样可以做到 \(O(n^2M^2)\).


考虑看作一个匹配问题,每次匹配两个球,而不是考虑 \(\max(mx,\lfloor sum/2 \rfloor)\)。(我觉得这一步实在太难想到了!)

考虑将问题划分成两个阶段。

第一阶段是把每次加进来的任意选两个消除;

第二阶段是钦定一种颜色 \(c\) 是之后最大的,每次都把新加进来的颜色和 \(c\) 消除,其他颜色不互相消除。

这样就有了自由操作的空间:我们可以在任意时间从第一阶段转换到第二阶段,对于所有这样的方案取 \(\min\)。(如果转换时间选错是不优的,但是在 dp 的时候可以任意时间转换,所以可以取到最优。感觉很妙!)

对于第一阶段,只需要记录当前剩下的颜色 \(c\) 和 \(c\) 多余的个数。

对于第二阶段,只需要记录当前钦定的颜色 \(c\) 和 \(c\) 多余的个数,如果是其他颜色多余则看作是负数个 \(c\)。

这样状态数就是 \(O(nM)\) 的了,并且第一种的多余 \(x\) 个可以和第二种的多余 \(x\) 个记在同一个状态里,所以状态数只有 \(f([0..4],[-M..M])\)。

暴力转移可以做到 \(O(n^2M^2)\),利用单调队列优化第一种转移,可以做到 \(O(n^2M)\)。

火星式选拔

反重:求熵

太难了,我觉得这种题是不是初见杀,没见过这种题就做不出来。做的时候知道这是暴力解除限制的题,却一点也没有高分的想法。

赛时想法:

考虑一个一个消去变量。猜一个结论,对于第一个变量 \(a_1\),值域可以分成若干段,\(a_1\) 取某一段值的时候,后面的答案是一个关于 \(a_1\) 的多项式,可以插值出来。然后不断二分下一段插值的端点。

但是这样做太劣了,只能跑 \(n\le 3\)。

正解也考虑了”一个一个变量消去,解除限制“,但是更加显式地把限制表示出来。

先钦定 \(n+1\) 号变量为 \(0\),加入限制 \(a_i\ge a_{n+1},a_i\le a_{n+1}+T\).

从 \(1\) 到 \(n\) 一个个消去变量。

考虑如果 \(2\) 到 \(n\) 都确定了,那 \(1\) 一定会受到左、右的限制,也就是会有一个 \([l_1,r_1]\)。

此时,后面的每个变量都对 \(1\) 变量产生一个 \([l_j,r_j]\) 的限制,那最后 \(l_1=\max(l_j),r_1=\min(r_j)\)。

将贡献差分,变成 \(r_1 - (l_1 - 1)\)。考虑枚举某个端点(左/右),被后面的哪个变量限制得最强。也就是 \(\max,\min\) 是在哪个值取到的。这样共有 \(n!2^n\) 种枚举。

由于钦定了某个 \(j\) 对 \(i\) 限制最强,在 \([2,n]\) 之间会形成一些新的限制,在 dfs 枚举的时候顺便加入。

容易发现限制会形成一个树的结构,连边 \(i\to fa_i\),\(n+1\) 是树的根。

这时转化成了这样的问题:要求 \(0\le a_i\le a_{fa_i}+w_i\),求所有方案数.

每个点维护一个多项式 \(f_i(x)\) 表示根节点权值取 \(x\) 时子树内方案数为 \(f_i(x)\)。

在树上从下向上转移,令 \(F_i(x) = \sum_{j=0}^{x+w_i} f_i(j)\),转移就是 每次把 \(F_i(x)\) 乘到 \(f_{fa_i}(x)\) 上。

由于 \(F_i\) 的项数恰好比 \(f_i\) 多 \(1\),转移复杂度就是树形背包,为 \(n^2\).

于是总复杂度 \(O(n!2^n n^2)\)。

终于补完了所有 zky 场切的题

鸽子收费站

需要支持这样的操作:将 \([l_1, r_1]\) 中值在 \([l_2, r_2]\) 的元素全部置为 \(r_2\)。以及单点修改,单点查询。

这题居然能做到 polylog 的,很厉害。

考虑 Segment Tree Beats 式维护,在线段树上做,如果区间中有 \(\ge 2\) 个要被修改的值就递归,否则修改这个值。

在根节点上维护一棵平衡树,表示所有值去重后的结果。

对于线段树每个子节点维护一棵平衡树,每个节点连向线段树父亲节点中平衡树的对应节点。

考虑修改时,有 \(\ge 2\) 中要修改就要递归。而只有 \(1\) 种要修改时,不会改变儿子的平衡树,只可能要改变自己和祖先的。

标签:UNR,变量,一个,sum,补题,可以,考虑,节点
From: https://www.cnblogs.com/Rainbowsjy/p/17609460.html

相关文章

  • 暑假集训D11 2023.8.4 补题
    题意给定一个数组\(a\).询问区间\([l,r]\)是否可以分成\(k\)段,每一段的和都是\(2\)的倍数(偶数)考虑前缀和\(sum\),如果\(sum[i]-sum[j-1]\)是偶数,那么\([j,i]\)一定是\(1\)个合法的区间.因此对于询问\(l,r\),可以统计前缀和的值为偶数的个数,......
  • 暑假集训D10 2023.8.3 补题
    D.DnDDice给出分别有不同个数的\(4,6,8,12,20\)面骰子,\(k\)面骰子的每个面的点数分别是\(1~k\).问用上所有骰子能组合出来的情况的概率从大到小排序,如果有相同的可能性的情况,按任意顺序即可.\(\operatorname{Solution}\)可以将骰子两两合并,合并后的骰子大小为\([m......
  • .Net Core AlwaysRunResultFilter
    目录作用实现IAlwaysRunResultFilterIAsyncAlwaysRunResultFilterDemoCustomAsyncAlwaysRunResultFilterAttribute.cs全局注册Program.cs作用修改返回值,始终会触发,即使filter已经中断也会执行AlwaysRunFilter任何时刻都会执行一遍,可以在做了缓存的时候(如果有缓存并中......
  • UE5 unresolved external symbol 解决方案
    背景unresolvedexternalsymbol问题是模块代码使用了其他模块,build.cs文件中没有添加对这些模块的依赖问题Error LNK2001 unresolvedexternalsymbol"public:virtualvoid__cdeclUWidget::PreSave(classFObjectPreSaveContext)"(?PreSave@UWidget@@UEAAXVFObjectPreSaveCon......
  • UOJ312 【UNR #2】梦中的题面
    好题。容斥后插板,要计算的形如\(\binom{Sum}{m}\)的样子。这个\(Sum\)可能会很大,不能直接设进状态,但是我们\(dp\)需要\(Sum\)计算组合数。解决方法是用范德蒙德卷积\[\sum_{i=0}^{k}{\binom{n}{i}\binom{m}{k-i}}=\binom{n+m}{k}\]设\(dp_i\)表示当前所有\(\binom......
  • 暑假集训D9 2023.8.2 补题
    A.「EZEC-10」排列排序给你一个长度为\(n\)的排列\(p_1,p_2,\cdots,p_n\)。你需要把它排序。每次可以花区间长度,即\(r-l+1\)的代价,选择排列中的任意一段区间\([l,r]\),并将\([l,r]\)从小到大排序。现在你可以让他进行若干次这个操作,直到\(p\)中元素的值从\(1\)到......
  • 暑假集训D8 2023.8.1 补题
    C.P3029[USACO11NOV]CowLineupS有\(n\)只牛,他们各自有自己的编号(不同牛的编号可能是相同的).这些牛站在不同的位置.现在需要给这些牛拍一张照.有如下要求选定一个范围内的牛拍照,这些牛需要包含所有出现过的编号照片的成本是这个范围,因此范围越小越好已经给定所有......
  • 补题报告之S班暑训第三场
    成绩比赛经过\(\text{A}\)看上去像一个贪心。由于不知道咋搞,胡出一个假的结论。\(x\)选手在别的榜单所在位置,之后的选手优先选,多个榜单,按照满足条件的榜单数量对每个选手排序。然后模拟。事实证明,他只有\(\text{50}\)分。\(\text{B}\)没理解样例咋来的,也不知道斜对角线的......
  • Codeforces Round 888 (Div. 3) 补题
    独立补了一道记忆化搜索的题,https://codeforces.com/contest/1851/problem/E由于初次接触对于使用场景和注意事项都不是很熟悉,写加调估计得有3h。本题的题面保证了本题是个无环图,允许dfs函数会有出口,存图不能用链式前向图,因为非常容易构造数据使得为稠密图,所以用二维数组或vec......
  • 暑假集训D6 2023.7.29 补题
    原比赛链接2022年华中科技大学程序设计新生赛(重现赛)官方题解华中科技大学2022新生赛(HUSTFCPC2022)题解&滚榜\(underset\)\(\underset{\sim}Λ\)\(\underset{\sim}{abcd}\)N.WalkAlone'sConjecture题意:给定一个整数\(n\),找出两个数\(x\)和\(y\),使得满足如下......