天天看点

NOIP模拟68

T1:

  考场上考虑的时路径,即考虑路径完全相同这一条件然而显然路径数非常多,

这种思路无法避开路径的具体信息,因此并不正确,然而n = 2的点可以通过该方式哈希判断,因此未找到正确思路

  正解比较显然,当s[i + 1][j] == s[i][j + 1]时显然可以运送两人,因此当存在可以连接上的两处该位置时即可运送四人

也就是问题转化为判断是否存在能够连接上的两处该种位置,二维前缀和即可

代码如下:

NOIP模拟68
NOIP模拟68

View Code

T3:

  比较显然的策略为a从大到小排序进行配对,考虑形式话,得到问题实质上时求是否对于所有k(1 <= k <= n)

满足:sigma a[k] <= sigma min(b[i],k),考虑如何优化,从min着手,考虑拆min,max类型一种方式为分类讨论

通过权值数据结构进行维护,另一种方式即为类似筛法,考虑b[i]与k中每一个1的贡献,可以得到,若设c[i]为满足b[x] >= i的个数

那么原式等价于sigma a <= sigma c,进一步化简得到sigma (c - a) >= 0,比较套路的做法,利用数据结构维护最小值,这样只需要

判断最小值是否满足要求即可,这也启示我们对于这类判断题,通常可以将整体判断转化为极值判断降低时间复杂度

  于是首先根据c - a建树,每次操作区间修改即可,注意线段树内部并不能实现随机访问,因此一般先处理线段树初始值,再利用其做维护操作

另外,c数组的求解方法也值得思考,同样类似筛法,将b数组进行排序,当前b数组中数量即为c数组值,当c数组下表变化时,动态维护b即可

NOIP模拟68
NOIP模拟68