Codeforces Round #510 Div. 2

最近一直在Codeforces打比赛,总体感觉Codeforces的题目比LeetCode的质量更高。我现在是大概能做3—4题的水平,只记录我已经AC的题。

A. Benches

题意

有一个数组,将一个数任意分配加给数组中的数,求数组中最大的数的最小可能值和最大可能值。

思路

对原数组中最大的数加上分配的数即为最大可能值;考虑将所有数加到和原数组中最大的数一样,若需要的数大于分配的数,则最小可能值为原数组中最大的数,否则先分配需要的数,再平均分配剩余的数。

B. Vitamins

题意

有一个序列,每一个元素包括费用和一个仅由 A B C ABC ABC组成的字符串。从序列中任意选取元素,保证被选择的字符串总共包含 A B C ABC ABC这三种字符,求最小费用。

思路

找出一个字符串包含字符的所有可能以及每一种可能对应的最小费用,再找出包含三种字符的最小组合,取费用最小的组合。一个字符串包含的字符有 7 7 7种可能,分别为 { A } , { B } , { C } , { A B } , { A C } , { B C } , { A B C } \{A\}, \{B\}, \{C\}, \{AB\}, \{AC\}, \{BC\}, \{ABC\} {A},{B},{C},{AB},{AC},{BC},{ABC},总共包含三种字符的最小组合为 { A } + { B } + { C } , { A } + { B C } , { B } + { A C } , { C } + { A B } , { A B } + { A C } , { A B } + { B C } , { A C } + { B C } , { A B C } \{A\}+\{B\}+\{C\},\{A\}+\{BC\},\{B\}+\{AC\},\{C\}+\{AB\},\{AB\}+\{AC\},\{AB\}+\{BC\},\{AC\}+\{BC\},\{ABC\} {A}+{B}+{C},{A}+{BC},{B}+{AC},{C}+{AB},{AB}+{AC},{AB}+{BC},{AC}+{BC},{ABC}

C. Array Product

题意

有一个长度为 n n n的数组,执行 n − 1 n-1 n1次操作,每次操作将一个数乘到另一个数上或去掉一个数,最多只能执行一次去除操作,由于每一次操作会减少一个数,最后将只剩一个数,求一种操作序列使最后剩下的数最大。

思路

乘起来的数越多剩下的数越大,然后考虑 0 0 0和负数的个数。若负数的数量为奇数,则需要去掉其中绝对值最小的一个负数,否则不用去除。因为正数和去除后负数的乘积为正数,所以将所有 0 0 0去掉得到剩下的值更大。因此先将所有的 0 0 0乘起来,再乘上需要去除的负数,然后去掉这个乘积,将剩下的数乘起来就可以得到最大值。

E. Vasya and Magic Matrix

题意

有一个矩阵,每一个元素为一个数。从一个元素出发,得分为 0 0 0,随机等概率跳转到一个更小的元素,然后得分加上两个元素欧几里得距离的平方。按逆元计算求最后得分的期望值。

思路

每一个元素等概率跳转到所有更小的元素,因此得分的期望值为所有更小的元素得分和加分的平均值。先对矩阵中所有元素排序,然后从小到大计算得分,并记录得分前缀和以及加分前缀和。得分前缀和可以在计算得分的过程中得到,加分前缀和需要对欧几里得距离的平方拆分,对位于 ( x 0 , y 0 ) (x_0, y_0) (x0,y0)的元素,加分为 ∑ ( ( x 0 − x ) 2 + ( y 0 − y ) 2 ) = ∑ ( x 0 2 + y 0 2 ) + ∑ ( x 2 + y 2 ) − 2 ( x 0 ∑ x + y 0 ∑ y ) \sum ((x_0 - x)^2 + (y_0 - y)^2) = \sum (x_0^2 + y_0^2) + \sum (x^2 + y^2) - 2(x_0 \sum x + y_0 \sum y) ((x0x)2+(y0y)2)=(x02+y02)+(x2+y2)2(x0x+y0y),可以预处理每一项需要的前缀和。设 n n n为矩阵中元素的个数,排序的时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn),计算得分的时间复杂度为 O ( n ) O(n) O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值