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

复盘|第303场周赛

2022-12-28 20:30 作者:UCLmsc  | 我要投稿

第一个出现两次的字母

【哈希集合】用 set 保存已经出现的字母。

相等行列对

【哈希表】用哈希表统计每行出现的次数,然后遍历列,累加哈希表中列出现的次数。

设计食物评分系统

【有序集合】我们可以用一个哈希表s记录每个食物名称对应的食物评分和烹饪方式,另一个哈希表套平衡树cs记录每个烹饪方式对应的食物评分和食物名字集合。对于changeRating操作,先从cs[fs[food].cuisine]中删掉旧数据,然后将new Rating和food记录到cs和fs中。

【懒删除堆】用堆:对于changeRating操作,直接往cs中记录,不做任何删除操作;对于highestRated操作,查看堆顶的食物评分是否等于其实际值,若不相同则意味着对应的元素已被替换成了其他值,堆顶存的是个垃圾数据,直接弹出堆顶;否则堆顶就是答案。

优质数对的数目

【遍历】对于x|y和x&y,在同一个比特位上,如果都有1,那这个1会被统计两次;如果一个为1另一个为0,那这个1会被统计一次。记c(x)为x的二进制表示中的1的个数,则有如下等式:c(x|y)+c(x&y)=c(x)+c(y)。另外一种思路是把二进制数看成集合,根据容斥原理AUB=A+B-A∩B,得AUB+A∩B=A+B.

【后缀和优化】从小到大遍历cnt[c(x)]],由于c(y)≥k-c(x),c(y)也会从大到小减小,我们可以用后缀和维护这些cnt[c(y)]的和。


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

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