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

复盘|第290场周赛

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

多个数组求交集

【哈希表】统计每个整数的出现次数,在nums中所有数组都出现过的元素的freq = len(nums),返回排序后的元素集合。

统计圆内格点数目

【枚举】枚举所有点,找圆。优化一下,先按半径从小到大排序,可以更早地碰到包含当前枚举点的圆。

统计包含每个点的矩形数目

【按纵坐标排序】对每个(x,y)统计横坐标≥x且纵坐标≥y的矩形的个数,将纵坐标≥y_i的矩形的横坐标加入一个有序列表xs,由于纵坐标范围只有[1,200],可以暴力地在每次插入完横坐标后对xs排序,排序的次数不会超过100次,在xs中二分即可算出横坐标不小于x_i的矩形个数。

如果纵坐标范围10^9,用名次树来做(Treap,python的SortedList).

【按横坐标排序】按横坐标从大到小排序,对于点(x_i,y_i),统计横坐标不小于x_i的矩形个数,高度不超过100,可以用数组存每个高度有多少个矩形,累加高度≥y_i的矩形个数,实现时可以暴力累加或树状数组。

【按行统计 + 二分查找】纵坐标至多100种,看成100行数据,统计这100行的矩阵横坐标,对于每个(x_i, y_i),从第y_i行遍历到第100行,每一行,二分求出多少个矩阵的横坐标≥x_i,累加为ans。

花期内花的数目

【差分】flower_i是区间[start_i, end_i]的每个时间点都增加一朵花,对于第i个人,算person_i时间点上有多少朵花。(不超过person_i时间点变化量的累计值)python用defaultdict或sorteddict都行。

【转换 + 二分】第i个人能看到花的数目,等价于star≤person_i的花的数目 减去 end<person_i的数目,即开花数减凋落数。单独统计开花时间和凋落时间,排序后二分就得到ans.


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

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