HGOI 20190830 题解
作者:互联网
Problem A 钥匙
有$n$个人和$m$个钥匙在数轴上,人的坐标为$a_i$,钥匙的坐标为$b_i$
而门的坐标为$p$,要让所有人获得一把不同钥匙,并且到达门,最长时间最短是多少。
对于$100\%$的数据满足$10^3 \leq n \leq 10^3 , n \leq k \leq 2\times 10^3$
Solution :
对于部分数据,可以二分答案然后进行二分图匹配,实测可以通过$80\%$的数据。
事实上,对上面算法的极限复杂度是$O(n^2 k log_2 10^9)$
事实上,我们可以将$nk$中人和钥匙的配对方案求出,直接从后往前贪心。
这样子复杂度是$O(n \times k (\ log_2 n + log_2 k))$的。
Problem B 汪哥图
给出$n\times m$的$01$矩阵,保证这个矩阵中任意两个$1$之间最多有一条路径不经过$0$。
给出$Q$组询问,求子矩阵联通块个数。
对于$100\%$的数据满足$2 \times 10^3 \leq n,m \leq 2\times 10^3 , 1 \leq Q \leq 2\times 10^5 $
Solution :
我们先假设这个子矩阵中所有的$1$都自成一格连通块,显然,有好多连通块可以合并。
由于矩阵中的性质: 任意两个$1$之间最多有一条路径不经过$0$,所以合并的方式一定是从左到右或者从上到下。
即如果$a[i][j] $和$a[i+1][j]$都是$1$,那么必然会减少一个连通块,如果$a[i][j]$和$a[i][j+1]$都是$1$,也必然会减少一个连通块。
所以,我们定义$f[i][j] = [a[i][j] = 1 ] \times [a[i+1][j] = 1] , g[i][j] = [ a[i][j] = 1 ] \times [a[i][j+1] = 1] $
对于左上角坐标为$(x_1,y_1)$,右下角坐标为$x_2,y_2$的子矩阵,答案是$ans = \sum\limits_{i=x_1}^{x_2} \sum\limits_{j=y_1} ^ {y_2} a[i][j] - \sum\limits_{i=x_1}^{x_2 - 1} \sum\limits_{j=y_1} ^ {y_2} f[i][j] - \sum\limits_{i=x_1}^{x_2} \sum\limits_{j=y_1} ^ {y_2-1} g[i][j]$
显然可以用二维前缀和优化。
复杂度是$O(nm + Q)$
标签:10,limits,题解,sum,矩阵,times,leq,20190830,HGOI 来源: https://www.cnblogs.com/ljc20020730/p/11434655.html