跳转至

2021HDU暑期多校第一场

排名 当场过题数 至今过题数 总题数
112/812 6 11 11

B

upsolved by JJLeo

题意

二维平面上,维护以下两种操作:

  • 添加一个点,有对应的权值。
  • 询问一个圆内点的权值和。

保证数据随机。(\(1 \le n \le 2 \times 10^5\))

题解

KD-Tree 模板,只需更改询问中两个剪枝函数:

  • 矩形四个角都在圆内,必然所有点都在圆内,直接返回。
  • 矩形内 \(x\)​ 坐标距离圆心的最小值 \(X\)​,和矩形内 \(y\)​ 坐标距离距离圆心的最小值 \(Y\)​​,如果 \(X^2+Y^2 > r^2\),那必然矩形内所有点都不在圆内。

给了 \(10\) 秒,这样就可以卡过去了。

C

upsolved by JJLeo

题意

给定一个 \(n \times m\)​ 的方格图,有 \((n-1) \times (m-1)\)​ 个格子,有 \(n\)​ 行 \(m\)​​ 列的格子边界,每条边可有可无,一些格子要求其周围的四条边的数量是奇数或偶数,同时要求所有边连成数个简单环,求方案数。(\(2 \le n,m \le 17\))

题解

考虑每条边是否存在设为一个 \(01\)​​ 变量,则对于每个有限制的格子可以列出数个异或方程,同时所有边连成数个简单环等价于每个点的度数为偶数,同样可以列出数个异或方程,这个异或方程组解的个数即为答案。

总时间复杂度为 \(O(n^3m^3)\),可以用 bitset 优化掉一个 \(w\)

然而,我之前的消元都是假的,但基本都是满秩的情况,所以没出毛病。正确的消元方法是,对于一行,如果该列下面全是 \(0\)​​,那么就考虑下一列,但并不切换到下一行,这样才能保证所有考虑到的行都有一个关键变量,剩下的变量不管怎么选都可以依靠关键变量使解合法。

无解条件即为没考虑到的行(也就是没有关键变量的行)最后一列有 \(1\),因为一堆 \(0\)​ 不能异或出 \(1\),对于正常的高斯消元这也是成立的。

G

upsolved by JJLeo

题意

BSGS 裸题,但是我们忘了这个算法的存在。

题解

这个算法可以在 \(O(\sqrt p)\)​​ 的时间内求出 \(a^x\equiv b\pmod p\)​​​ 的所有解,这玩意其实不太需要模板,稍微写一下原理:

\(s=\left\lceil\sqrt p\right\rceil\)​​,遍历正整数 \(i\in\left[1,s\right],j\in\left[1,s\right]\)​​,那么 \([0,p-1]\)​ 的所有数一定会被 \(is-j\)​ 表示过。

从而原问题转化为 \(a^{is-j}\equiv b\pmod p\)​, 即 \(a^{is}\equiv a^jb\pmod p\)​​,枚举其中一边放 unordered_map 里,再枚举另一边看有没有即可。

I

upsolved by JJLeo

题意

\(n \times n\)​​ 的二维平面内一些位置有数,同一横坐标只有一个位置有数,多次询问矩形区域内不同纵坐标的个数,可以离线。(\(1 \le n \le 10^5\))

题解

因为同一横坐标只有一个位置有数,可以对横坐标范围用莫队,同时对值域分块就可以做到修改 \(O(1)\),查询 \(O(\sqrt n)\),总时间复杂度为 \(O((n+q)\sqrt n)\)

J

upsolved by Bazoka13 JJLeo

题意

对于一个长度为 \(n\) 且可以旋转的环,有多少本质不同的染色方案:

  • 使用红蓝绿染色,绿色最多出现 \(k\) 次。
  • 相邻颜色均不同。

(\(3 \le n \le 10^6\))

题解

有经典结论:旋转 \(i\) (\(0 \le i < n\)​) 次的置换有 \(\gcd(n,i)\)​ 个环。

考虑使用 Burnside 引理,计算对于每种置换有多少种方案使得置换后不发生变化。考虑对于旋转 \(i\) 次的置换,由于有 \(\gcd(n,i)\) 个环,那么所有相距 \(\gcd(n,i)\) 的位置都必须相同,可以发现这等价于一个长度为 \(\gcd(n,i)\) 的环,只不过将其在大环上重复了 \(\dfrac{n}{\gcd(n,i)}\) 次,如果一个小环出现了 \(x\) 次绿色,则总共出现了 \(\dfrac{nx}{\gcd(n,i)}\) 次绿色,它必须 \(\le k\)。​

\(f(n,m)\)​ 为在长度为 \(n\)​ 的环上放置 \(m\)​ 个绿色位置的方案数,则最终答案为:

\[ \frac{1}{n}\sum_{i=0}^{n-1}\sum_{j=0}^{\left\lfloor\frac{k\gcd(i,n)}{n}\right\rfloor}f(\gcd(i,n),j) \]

如果 \(m=0\)​,显然有 \(f(n,0)=2[n \bmod 2 = 0]\)​​。

否则,每个绿色位置之间的空隙有 \(2\)​ 种染色方案,总共有 \(2^m\)​ 种染色方案,而长度为 \(n\)​ 的环上选择 \(m\)​ 个不相邻位置的染色方案可以通过讨论第一个位置是否染色 + 不定方程得出,为 \(\dbinom{n-m}{m}+\dbinom{n-m-1}{m-1}\)​。​​从而有:

\[ f(n,m)=2^m\left[\binom{n-m}{m}+\binom{n-m-1}{m-1}\right] \]

最后推下式子,枚举 \(d=\gcd(i,n)\)

\[ \begin{aligned} &\frac{1}{n}\sum_{i=0}^{n-1}\sum_{j=0}^{\left\lfloor\frac{k\gcd(i,n)}{n}\right\rfloor}f(\gcd(i,n),j) \newline =&\frac{1}{n}\sum_{d \mid n}\sum_{i=1}^{n-1}[\gcd(n,i)=d]\sum_{j=0}^{\left\lfloor\frac{kd}{n}\right\rfloor}f(d,j) \newline =&\frac{1}{n}\sum_{d \mid n}\varphi\left(\frac{n}{d}\right)\sum_{j=0}^{\left\lfloor\frac{kd}{n}\right\rfloor}f(d,j) \newline \end{aligned} \]

显然 \(\sum \limits _{j=0}^{\left\lfloor\frac{kd}{n}\right\rfloor}f(d,j)\)​ 至多有 \(O(d)\)​ 项不为 \(0\)​,因此暴力枚举 \(n\)​ 的约数 \(d\)​ 后计算,总时间复杂度不超过 \(O\big(\sigma (n)\big)\)​,其中 \(\sigma (n)\)​​ 是 \(n\)​​ 的约数和,其规模通过线性筛可知:

\(n\) \(\sigma (n)\)​ 最大值
\(\le 10^6\) \(4390848\)
\(\le 10^7\) \(45732192\)
\(\le 10^8\) \(487710720\)

记录

总结

wls,我的超人!

Dirt

回到页面顶部