2019.7.6海亮暑假集训Day1考试总结

  对于代码和题目详见百度网盘,这只讲思路

  1,这道一看,显然会以为是一个前缀和(因为这一道题和累加和差不多),但是这一道要求的是平均数,所以我们可以向把平均数转换成求和就行了(可是我就是没想到),于是看到了数据范围(1<= ai <= 5000)很容易就能想到二分这么一个东西。所以我们可以二分枚举平均数,用一个数组来记录减去平均数后的值,求一遍前缀和。

  这样我们的问题就变成了如何求解一段区间里的最大值,然后用返回是不是大于0就行了。

  但是如何求解这一段区间的最大值呢?我们可以发现这么一个求最小值得东东:Max=max{sum[i]-sum[j]}(k<=i<=n&&j+L>=i)

  那么我们在枚举i得时候,就可以顺带求出j,可以详见蓝书中的Best Cow Fence

  2,这是一道很恶心的问题,首先这种想法根本就想不到(至少现在不行),那我们现在就讲讲正解。 

  首先,我们要把这一个曼哈顿距离就变成了切比雪夫距离(我也不知道是啥)。把坐标系旋转45度,就可以求解出一个东东。下面是互相转换的公式:

将一个点(x,y)的坐标变为(x+y,x-y)后,原坐标系中的曼哈顿距离 =新坐标系中的切比雪夫距离

将一个点(x,y)的坐标变为((x+y)/2,(x-y)/2) 后,原坐标系中的切比雪夫距离 = 新坐标系中的曼哈顿距离

然后我们发现所有棋子都被一个大矩形框起来了,那么最后划分为的点集必定分别被对角的小矩形框起来

(对于这一个大矩形的坐标,就是横,纵坐标的最大最小值组成的一个矩形)

因此我们可以贪心的决定每个棋子所属的小矩形

对于方案数,我们只需要枚举每一个点,如果这一个点的转换小于最大值,就说明两边都行,就可以*2

T3,由于我太菜了(或是出题人的毒瘤),所以至少现在我还是不会,就不写了......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值