2018 百度之星程序设计大赛

官方题解

A - 没有兄弟的舞会

题面

首先按照不能选兄弟选一次,最后把一个没有选过的点选上就行了。

可以证明这样的贪心策略是正确的。

代码

B - 序列期望

题面

考虑枚举最大值,最大值 (h) 的范围是 ([max{l_i},max{r_i}])

然后对于每个数,它能选的范围就是 ([l_i, min{r_i, h}]),它对答案的贡献就是 (sumlimits_{i=l_i}^{min{r_i, h}}i)

然而我们这样求出的答案是最大值 (ge h) 的,因此还需要减去 (h-1) 时整个序列的答案。

代码

参考学习

C - 带劲的and和

题面

我们发现,只有在同一个连通块中的两个节点 (i)(j)(f(i,j)) 才等于 (1)

因此我们对于每个连通块单独计算答案。

看到位运算,首先想到按位处理。

对于每个连通块中的 (v) 值排序,从小到大依次枚举,计算它对答案的贡献即可。

代码

D - 公共子序列

咕咕咕

E - 棋盘上的旅行

对于每一种颜色,每次重新 rand 一个 ([0,k-1]) 之间的标号,然后进行一次状压 DP。

(dp_{i,j,s}) 表示走到 ((i,j)) 时颜色状态为 (s) 所需的最少步数。

BFS 即可。

把随机种子设为 19260817,跑 500 次即可 AC。

代码

F - 带劲的多项式

咕咕咕

原文地址:https://www.cnblogs.com/xsl19/p/13574380.html