首页 > 其他分享 >【题解】Codeforces Round #845 (Div. 2) and ByteRace 2023

【题解】Codeforces Round #845 (Div. 2) and ByteRace 2023

时间:2023-01-22 15:00:42浏览次数:37  
标签:845 期望 cdot 题解 结点 Codeforces 权值 frac 考虑

建议开题顺序:A -> B -> C -> F -> E -> D

诈骗差评,典题差评,想易写难数据结构差评。

A. Everybody Likes Good Arrays!

好像是结论题,但是一力降十会。

显然最后合并完后,每个元素代表原数组中一个连续段的乘积,并且这些连续段两两不交,刚好覆盖完整个数组。

考虑令 \(f[i][0], f[i][1]\) 分别为考虑前 \(i\) 个元素,第 \(i\) 个元素所处的连续段乘积为 偶数 / 奇数 的最小代价,\(O(n^2)\) 转移即可。

B. Emordnilap

首先计数的壳子是假的,分讨一下两个元素 \(p_i, p_j\) 的大小关系,发现每次都会贡献 \(2\) 个逆序对。

所以每种排列的贡献其实是一样的,最后的答案就是 \({n \choose 2} \cdot 2 \cdot n! = n \cdot (n - 1) \cdot n!\)

C. Quiz Master

有双指针的 \(O(n)\) 做法,但是我选择 \(O(n \log n)\) 排序。

考虑把 \(a_i\) 从小到大排序,对于当前的 \(a_i\) 考虑贡献。显然此时每个数的权值越大越好,所以把 \(a_i\) 对其因子的贡献加上以后维护答案即可。

D. Score of a Tree

诈骗计数,考虑转化成期望。

根据期望线性性,整棵树的权值期望可以拆分成每个结点的权值期望之和。

观察不难发现第 \(i\) 个时刻结点 \(u\) 的权值是:所有初始时与结点 \(u\) 距离为 \(i\) 的后代结点的权值异或和,当 \(i\) 超过最深的后代节点时 \(u\) 变成 \(0\).

于是我们只需要考虑在 \(u\) 变成 \(0\) 之前的期望权值就行,再次根据期望线性性把它拆成每个时刻 \(u\) 的权值期望之和。

有一个结论:对于 \(k\) 个非 \(0\) 即 \(1\) 的变量,它们异或和的期望在 \(k > 0\) 时为 \(\frac{1}{2}\),反之为 \(0\).

证明很好证,考虑从中选出奇数个变量赋为 \(1\),此时最终的异或和为 \(1\). 选数一共有 \(\sum\limits_{i = 2x + 1, x \in N} {k \choose i} = 2^{k - 1}\) 种,根据期望定义得最终期望为 \(\frac{2^{k - 1} \cdot 1 + 2^{k - 1} \cdot 0}{2^k} = \frac{1}{2}\)

所以对于 \(u\) 变成 \(0\) 之前的时刻,\(u\) 的期望权值总是 \(\frac{1}{2}\).

令 \(d_u\) 为结点 \(u\) 内最深的后代结点到 \(u\) 的距离,则答案为 \(\sum\limits_{i = 1}^n \frac{d_i + 1}{2}\)

哇,数学,真好玩,真奇妙,真有趣!

E. Edge Reverse

图论典题。

首先考虑二分答案最大权值 \(w\)。

如果最终存在一个结点 \(u\) 满足题意,那么只需要从 \(u\) 跑一遍 dfs,然后按照 dfs 的顺序给边定向即可。

显然被定向的边构成原图的一棵生成树,所以不存在要求同一条边方向相反的情况。

所以对于权值小于等于 \(w\) 的边,可以直接当成双向边考虑。

这里有一个性质:对于一个 DAG,令 \(S\) 为可能到达所有结点的结点集合,则拓扑序最小的结点一定在 \(S\) 中。

考虑证明的话,因为 DAG 中结点不可能到达拓扑序小于它的结点,所以取拓扑序最小的结点一定最优。

显然如果存在满足题意的结点,那么和它同属一个强连通分量的结点也一定满足条件。

于是考虑缩点成一个 DAG,然后从其中的一个点跑一遍 dfs,判定是否满足题意。

不过不用真写拓扑排序,钦定一个入度为 \(0\) 的结点跑就行。

F. Comfortably Numb

这个做法没真写,图一乐就行。

首先令 \(l_i = \max\limits_{j < i, a_j > a_i} j, r_i = \min\limits_{j > i, a_j > a_i}\),不难发现只有端点均在 \([l_i, r_i]\) 内的区间才会以 \(a_i\) 为最大值。

于是考虑对 \(a_i\) 作前缀异或和,考虑其中一个取值范围较小的端点,假设为 \(r\)。现在的问题就转化成在 \([l_i, i)\) 中找到一个位置 \(p\),使得 \(pre_p \oplus pre_r \oplus a_i\) 最大。这个可以用 01 Trie 直接做。

上面的做法复杂度是 \(O(n \log n \log V)\),考虑证明一下。

如果将 \(a_i\) 从大到小考虑,上面的过程相当于一个分治:以最大值为中点,将序列划分成两半,然后递归进入两部分继续划分。

考虑分治的逆过程,发现遍历一遍较短的区间实际上相当于对两个分治区间进行启发式合并,所以复杂度不超过 \(O(n \log n)\)

也可以当成笛卡尔树考虑。

标签:845,期望,cdot,题解,结点,Codeforces,权值,frac,考虑
From: https://www.cnblogs.com/lingspace/p/cf1777.html

相关文章

  • B. Emordnilap【Codeforces Round #845 (Div. 2) and ByteRace 2023】
    B.Emordnilap原题链接Apermutationoflengthnisanarrayconsistingofndistinctintegersfrom1toninarbitraryorder.Forexample,[2,3,1,5,4]isape......
  • A. Everybody Likes Good Arrays!【Codeforces Round #845 (Div. 2) 】
    A.EverybodyLikesGoodArrays!原题链接Anarrayaisgoodifforallpairsofadjacentelements【相邻元素】,aiandai+1(1≤i<n)areofdifferentparity【奇......
  • P5030 题解
    前言题目传送门!更好的阅读体验?一道没啥意思的题目,但是好像很多题解都过不了现在的数据?思路只不过是把正常题目的马(\(1,2\))换成了另一种东西(\(1,3\))。很套路地,黑白......
  • 洛谷 P1123 取数游戏 (又是写了好久 最后还是无奈看了题解……)
    对于这个题感觉是一个比较典型的dfs.本题的状态是对于每个数字你可以选也可以不选,但是一旦你选定某个数字之后,他会对其周围的数字产生影响所以一定要标记好(注意这里标记的......
  • AT_abc286d 题解
    板子首先我们看到值域并不大。因此可以维护值域,跑完全背包。具体而言维护某一个值(小于\(10000\))是否能被凑出来,然后枚举物品种类以及物品数量即可。一般而言,完全背包......
  • AT_abc286e 题解
    首先观察到\(n\leq300\)加上全源“最短路”便可以自然而然的想到floyd。注意到floyd算法的可行性只依赖统计的东西具有优先级。这里我们定义优先级为最短路最短且......
  • ABC286 A-E题解
    题目虽然是大年三十,但是玩手机没写题有意思。从50分钟才开始看题。A题意:将数组中\([p,q]\)与\([r,s]\)的元素交换并输出。sbt。B大意:将字符中的na换成nya。......
  • AcWing 第87场周赛题解
    T1移动棋子算出为\(1\)的点离\((3,3)\)的距离即可。#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;intmain(){int......
  • Educational Codeforces Round 1 个人总结A-E
    EducationalCodeforcesRound1A.TrickySum数学,求\(1\dotsn\)的和减去小于等于n的二次幂乘2之和LLf[40];voidsolve(){ LLn; cin>>n; LLans=n+n*(n-1)/2;......
  • LeetCode.面试题02.05-链表求和-题解分析
    题目来源面试题02.05.链表求和题目详情给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并......