欢迎光临散文网 会员登陆 & 注册

复盘|第355场周赛

2023-07-26 21:38 作者:UCLmsc  | 我要投稿

按分隔符拆分字符串

【模拟】按题意分割字符串,注意去掉空串。

java不能直接分割点号,用String.valueOf("separator")会出错,需要转义。

合并后数组中的最大元素

【贪心 + 倒序遍历】往左边合并,如果右边的更大合并到左边那个数上,最后最左边的数,要么比合并的总和更大,要么已经合并了右边的数。

长度递增组的最大数目

【贪心】先排序,从使用次数少的数字开始使用,尽可能使用每个数字。对于每个新加入的数,分类讨论:数量不够,不足以构造新组则组数不变;数量刚好够或超出都能够构造新组则组数+1,可证填充x列充要条件为ΣN_i ≥ (x +1) * x / 2。

树中可以形成回文的路径数

【DFS + 位运算】回文串等价于至多一个字母出现奇数次,其余字母出现偶数次。可以用一个长为26的二进制数来压缩存储每个字母的奇偶性。一条边可以看成是1<<(s[i]-’a')。那么路径所对应的二进制数,就是路径上的所有边的异或和(因为异或就是模2剩余系中的加法,刚好可以表示奇偶性)。设v和w的最近公共祖先为lca,设从根到i的路径异或和为XOR。v到w的路径可以看成是v-lca-w,其中lca到v的路径异或和,等于根到v的异或和,再异或上根到lca的异或和(从根到lca的边异或了两次,等于0抵消掉)。lca到w的路径异或和也同理。所以v-lca-w的异或和为(XOR_v⊕XOR_lca) ⊕ (XOR_w ⊕ XOR_lca)即XOR_v ⊕ XOR_w, 这可以用类似两数之和的思路解决,用哈希表记录XOR_i的个数,设当前算出的异或和为x,去哈希表中找x的出现次数以及x⊕2的出现次数。


复盘|第355场周赛的评论 (共 条)

分享到微博请遵守国家法律