CF839
选了一套水 CF 我也是没招了
A.Arya and Bran
糖果之间并无差异与限制,所以直接贪心每天取上限颗糖果即可。直接模拟模拟完了
B.Game of the Rows
根据题意,一组 \(a_i\) 个数需要分为若干二元组 \((i,i)\) 或 \((i,0)\),相同的两个二元组、或至少一组的一个元素为空的两个二元组可以拼合变成四元组,问是否存在一种方案使得二元组的数目小于等于 \(2n\) 且四元组的数目小于等于 \(n\)
考虑先贪心使得所有选择都是四元组,当四元组的数目达到上限后使得剩下的全都选择二元组,判断二元组是否超过上限即可。因为四元组有两种情况,本人懒得在过程中记录各种变量进行分讨,所以我是在第一次循环中计算第一种四元组,若最后未达到上限再将部分二元组拼合成四元组判断。
C.Journey
直接在 dfs 过程中计算深度与到达每个叶子结点的概率即可
D.Winter is here
刚开始想的是枚举 \(a_i\) 作为子序列的最后一项,但这样避免不了枚举 \(\gcd\) 的复杂度,所以不如外层循环枚举 \(gcd=i\),计算所有满足条件的子序列长度之和。
显然序列 \(gcd=i\) 的必要条件是 \(\forall a’_j\in 序列, i|a’_j\),所以对于每个 \(i\),先计算出序列元素都是 \(i\) 的倍数的所有序列的长度之和。这可以先预处理 \(sum_i\) 记录原序列中约数包含 \(i\) 的数的个数,令 \(s=sum_i\) ,那么序列长度之和即为
但此时产生了一个问题:序列 \(\gcd\) 可能是 \(i\) 的倍数而非 \(i\)。其实可以倒序计算答案,容斥出去所有序列 \(\gcd\) 为 \(i\) 的倍数的序列长度之和就可以得到答案了。
E.Mother of Dragons
喜欢我们 \(n\leqslant 40\) 吗?
无向图还是太复杂了。
-
当图中只有一条边时,显然最优方案为两个节点权值都是 \(\frac{K}{2}\)
-
当给出的图是一条长度为 \(5\) 的链时,其价值可以表示为 \(s2\times (s1+s3)+s4\times (s3+s5)\),容易发现只给 \(s1,s2,s3\) 分配权值时价值最大,这启示我们在最优解中可能并非所有节点都有权值
-
现在考虑钦定某个点有权值,逐渐给与该点有关的点分配权值。经过计算发现加入一个点 \(v\) 会使得价值增加当且仅当点 \(v\) 与目前子图中的所有点都有边,最后的答案即为原图中的最大完全子图平均分配权值后的价值
所以在原图上求出最大团即可。求最大团可以 meet-in-the-middle,也可以用 Bron-Kerbosch
后话
算出来个与 \(\frac{n(n-1)(2n+1)}{2n^2}\) 有关的不等式哈哈哈。