Good Bye 2020

感觉是很久没打Codeforces了,有点手生,前期卡题很严重。
C题明明有简单的贪心,却想了很久的DP,还是个错的,D题还读错了题,没读到取最大值,白想了很久。最后的G题感觉也有点超出能力范围了。
直接一手 − 9 -9 9 rating。永远不变的真理:不打等于上分。

A Bovine Dilemma

题意

给出 n   ( n ≤ 50 ) n\ (n\le50) n (n50) x i x_i xi 表示直角坐标系上,X正半轴上的 n n n 个点 ( x i , 0 ) (x_i,0) (xi,0)。求从中任选两个点和 ( 0 , 1 ) (0,1) (0,1) 点能组多少个面积不同的三角形。

题解

直接认为X正半轴上的点是三角形的底,那么三角形的高已经固定是 1 1 1 了,此时只要判断有多少种不同的底即可,那么 n 2 n^2 n2 枚举即可。

B Last minute enhancements

题意

给出 n   ( n ≤ 1 0 5 ) n\ (n\le10^5) n (n105) a i   ( a i ≤ 2 × 1 0 5 ) a_i\ (a_i\le2\times10^5) ai (ai2×105),每个数字可以保持原样或者 + 1 +1 +1,请问最多能构造出多少个不同的数字。

题解

从小到大排序,对于当前的数字,如果在之前出现了,那么就 + 1 +1 +1,否则保持不变,这样贪心即可。

C Canine poetry

题意

给出一个长度不超过 1 0 5 10^5 105 的字符串,可以任意更改每一位上的字符,求最少更改多少个字符,使得字符串中不包含长度大于 1 1 1 的回文子串。

题解

其实要求长度不大于 1 1 1 是非常苛刻的,这意味着:

  • 相邻的两个字符不能相同,否则形如 a a aa aa 的字串就是回文的。
  • 隔一位相邻的两个字符不能相同,否则形如 a b a aba aba 的字串就是回文的。

满足这两个条件即可,这样奇回文和偶回文都不存在了。

其实从左到右贪心地修改,每次使得当前字符和前两个字符不同即可,不需要考虑对后面的影响,因为小写字母有26个,总是能找到一个没有后效性的字符。
可以用一个 @ @ @ 字符表示绝对不会相同的字符。

D 13th Labour of Heracles

题意

给出一颗规模为 n   ( n ≤ 1 0 5 ) n\ (n\le10^5) n (n105) 的树,树上的每个结点都有一个权值 w i   ( w i ≤ 1 0 9 ) w_i\ (w_i\le10^9) wi (wi109)
现在可以对树的进行 k k k 染色,染色后:对于每种颜色,提取出该颜色的子图(该颜色的所有边以及这些边连接的点),子图中的每个连通块中所有点的权值和记为这个连通块的得分,所有连通块中最大得分是这个颜色的得分。
对于一种染色方案,所有颜色的得分求和就是这个染色方案的得分。
现在要求 k k k 染色的最大得分, k k k 1 1 1 n n n 都要输出。

题解

k k k 1 1 1 n n n 都要输出,其实已经说明了这个题目需要动态地解决。
首先 1 1 1 染色只有一种方案。当我们需要 2 2 2 染色时,我们发现,如果第二种颜色和第一种颜色正好分开这棵树,两个子图都只有一个连通块时,染色方案的得分正好比 1 1 1 染色多出那个两种颜色分割点的权值。而且不难发现,如果任意一种颜色的子图有多个连通块时,整体的得分将大打折扣。
所以,我们希望这个分割点的权值尽可能大,那就让这个点是整棵树权值最大的点就行了。
但是,如果这个点是个叶子结点,显然是不行的,所以,一个点能够充当多少次分割点,就是他的 度数 − 1 -1 1
所以,给所有的点按权值从大到小排序,不断更新得分即可。

E Apollo versus Pan

题意

给出 n   ( n ≤ 5 × 1 0 5 ) n\ (n\le5\times10^5) n (n5×105) x i   ( x i ≤ 2 60 ) x_i\ (x_i\le2^{60}) xi (xi260),求:
∑ i = 1 n ∑ j = 1 n ∑ k = 1 n ( x i   &   x j ) ⋅ ( x j   ∣   x k ) \sum_{i=1}^n \sum_{j=1}^n \sum_{k=1}^n (x_i \, \& \, x_j) \cdot (x_j \, | \, x_k) i=1nj=1nk=1n(xi&xj)(xjxk)

题解

这题看着吓人, 5 × 1 0 5 5\times10^5 5×105的规模下,要算一个 n 3 n^3 n3 的东西,其实不难。
当我们固定一个 a j a_j aj a i a_i ai 时,我们发现后面的 ( x j   ∣   x k ) (x_j \, | \, x_k) (xjxk) 其实是可以预处理出来的,它就只是个一个数字和所有数字的 a n d and and 和而已,此时它就可以作为一个常数了,当我们只固定 a j a_j aj 时发现, ( x i   &   x j ) (x_i \, \& \, x_j) (xi&xj) 也是能预处理的,也能提取出来,那么整个式子就可以化为:
∑ j = 1 n S u m o f A N D j ⋅ S u m o f O R j \sum_{j=1}^n SumofAND_j \cdot SumofOR_j j=1nSumofANDjSumofORj
那么这两个预处理可以按位拆分分别算贡献即可,整体复杂度是 O ( n l o g n ) O(nlogn) O(nlogn) 的。

F Euclid’s nightmare

题意

给出 n n n m m m 维的向量,这些向量的每一维都是只有 0 , 1 0,1 0,1 的,向量做加法时,每一维求和都会 m o d   2 mod\ 2 mod 2
特别地,每个向量最多有两维是 1 1 1 ,其余维度都是 0 0 0
任取这 n n n 个向量集合的一个子集求和可以得到一个向量,这些向量构成一个新的集合 T T T,求 T T T 集合的大小 ∣ T ∣ |T| T。(特别的,如果子集为空,那么求出的向量为 0 0 0 向量)。
同时,求出最小的子集 S ′ S' S,使得这个子集能求出的新集合大小即为 ∣ T ∣ |T| T,多个方案求字典序最小的方案。

题解

首先我们可以知道,向量集合可以写成一个矩阵,矩阵中被化简掉的行是无效的,因为这些行可以被别的行表示。
突破口在于每个向量只有两维是 1 1 1
对于每个维度,它有三种状态,第一种是它还不能被表示出来,第二种是它能被表示出来,但它是和另一个维度捆绑的,第三种是它能被自由地表示出来。
那么我们没加入一个向量,就看他是否能更新我现有的这些状态,能就加入集合,不能就Skip。
整体的更新可以用一个并查集表示,自由的维度就和第 m + 1 m+1 m+1 个虚点连接即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值