2021-11-16NOIP模拟赛总结

1.时间安排

T1:8:50—9:57

  如果直接找的话O(n2)直接就炸了,没写这档暴力,
  考虑面积得出方式,同行选一个点,同列选一个点,计算距离之后相乘,那么假如同行选一个,同列全选,也是可以计算的,处理所有点到该点的距离之和即可(即sumx),sumx处理完之后是一个不变量,相当于底,找三角形的高再求一次sum就行了,
  但是预处理的话也有可能会炸(最差n2),那么坐标该怎么求呢?
  首先按照x第一关键字,y第二关键字排序,依次放入对应下标的vector里(不离散化,并不会炸,vector并没有初始内存,我已知的只有queue有),可以保证vector里元素单调不下降(伏笔).放入元素同时将在当前元素之前的元素的sum作为第二维(second)一同放入,同一行或一列的所有元素的sum放入sumx(x作为下标)或sumy(y作为下标)中(可看下图理解).
数据图例
  求同一列或同一行的sum时,先二分出当前元素在vector中的位置id,然后就能算出比当前元素不小的元素个数(因为要减去当前点的影响),等于vector.size()(元素个数)-id(当前元素是第k小的话,id=k-1,因为最小的元素id为0),比当前元素小的元素数量则为id,计算比当前元素不小的元素的sum(sumx\sumy-vx\vy[id].second,见伏笔),然后该点能够产生的面积总和就是
s u m a l l − v [ i d ] . s e c o n d − ( v . s i z e ( ) − i d ) ∗ v a l n o w + i d ∗ v a l n o w − v [ i d ] . s e c o n d sumall - v[id].second - (v.size() - id) * valnow + id * valnow - v[id].second sumallv[id].second(v.size()</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值