其实这玩意就是缝合怪……
D1 考的是 SCOI2018 的 D1
D2 是用 SCOI2019 D2T2 和 SCOI2018 D2T2,D2T3 拼的……
如果你刷穿 SCOI,你就能无伤切题
但是这些题对于初见的小蒟蒻来说还是很震撼的……
我两天加起来连 200 都没有……
一棵树, n n n 个点,有点权, q q q 次操作,每次为两种中的一种:
n , q ≤ 1 0 5 n,q \leq 10^5 n,q≤105,点权绝对值 ≤ 1 0 4 \leq 10^4 ≤104
一棵树, n n n 个点,每个点有一个权值 v i v_i vi,问有多少个点对 ( x , y ) (x,y) (x,y) 满足:
n ≤ 1 0 5 n \leq 10^5 n≤105, v i , A , B , p ≤ 1 0 16 v_i,A,B,p \leq 10^{16} vi,A,B,p≤1016,保证 p p p 是质数
一个模 p p p 意义下的 m m m 维空间,上有 n n n 个奇点。
一次操作为:选择一个奇点,将你传送到你当前的点关于该奇点的对称点。
有 q q q 次询问,每次询问从原点开始,能不能通过操作到达指定的点。
n , q ≤ 1 0 5 n,q \leq 10^5 n,q≤105, m ≤ 10 m \leq 10 m≤10, p ≤ 1 0 8 p \leq 10^8 p≤108
一棵树, n n n 个点,有边权,每个点被染色成 R,G,B \texttt{R,G,B} R,G,B 中的一种。
一个合法的点集对 ( U , V ) (U,V) (U,V) 满足:
问不同的合法点集对个数。答案对 1 0 9 + 7 10^9 + 7 109+7 取模。
n ≤ 2000 n \leq 2000 n≤2000, 1 ≤ 边权 ≤ 1 0 7 1 \leq \text{边权} \leq 10^7 1≤边权≤107, k ≤ 1 0 8 k \leq 10^8 k≤108
一个凸多边形, n n n 个顶点,每个顶点有一个 t y p = 0 / 1 typ = 0/1 typ=0/1。其内部有 m m m 个圆,半径不一定相同。现在有 t t t 天,每天从凸多边形上随机取一点,与离该点最远的顶点连线。如果该顶点 t y p = 0 typ=0 typ=0 或该线与某圆有交点,则贡献为 0,否则贡献为 1。另外,你还可以拆除一些圆,每拆除一个圆需要 k k k 天,贡献为 0。假设你拆除了 x x x 个圆,使得当前贡献期望为 p p p,则你要科学决定 x x x 和拆除的圆,来最大化 p t + k x \frac{p}{t+kx} t+kxp。
n ≤ 500 n \leq 500 n≤500, m ≤ 50 m \leq 50 m≤50, t ≤ 1 0 4 t \leq 10^4 t≤104, k ≤ 1 0 6 k \leq 10^6 k≤106,坐标范围 1 0 7 10^7 107。
一个物品集 S S S,初始为空, q q q 次操作,每次为以下三种中的一种:
q ≤ 1 0 5 q \leq 10^5 q≤105, a , b , A , B ≤ 3 × 1 0 7 a,b,A,B \leq 3 \times 10^7 a,b,A,B≤3×107, v ≤ 1000 v \leq 1000 v≤1000。
第一题好像在原比赛(SCOI2018)的时候卡空间,卡死了很多动态点分治,但是在 online 里面并没有卡。。。
没有卡,就写动态点分治呗,点分树上每个点开棵线段树维护一下到分治区域内每个点的距离就行了。时间复杂度 O ( n log 2 n ) O(n \log^2 n) O(nlog2n)。
二次剩余。在模意义下解二次方程,解出来
v x = − A ± A 2 − 4 B 2 v y v_x = \frac{-A\pm\sqrt{A^2 - 4B}}{2} v_y vx=2−A±A2−4Bvy
所以,我们只需要求一下 A 2 − 4 B A^2 - 4B A2−4B 这东西模 p p p 意义的二次剩余就完事了,用 Cipolla \text{Cipolla} Cipolla 就行了。求出来以后就用 map 和 dfs 瞎搞搞。
如果没有二次剩余,那么就等同于统计 v x = v y = 0 v_x = v_y = 0 vx=vy=0。
时间复杂度 O ( n log n ) O(n\log n) O(nlogn)。
不会,咕咕咕
先吐槽一句:online 里面没有取模,带上高精复杂度是不对的。
依次考虑所有绿点,分别将它视作那个中心点,这个的方案数用 dp 很好算。但是很明显会重。重的时候就是存在一些绿点联通的时候。
首先可以发现如果能够对交集连通块分类求解,那么方案数是不会重的,所以我们考虑怎么容斥可以使每个交集连通块恰被统计 1 次。
对于每个交集连通块,很明显会在每个能作为中心点且在连通块内的点处统计到一次答案,而这些点必然也形成连通块。对于一个连通块,点数减去边数恒为 1,所以我们考虑枚举每组相邻的 G \texttt{G} G 点对,计算两者均可为中心点的情况下的答案减去即可。这样就能够使得每个连通块恰好被统计 1 次。
时间复杂度 O ( n 2 ) O(n^2) O(n2)。
不会,咕咕咕
大体思想:
二维的部分背包可以先一般化,也就是把 ( a , b , v ) (a,b,v) (a,b,v) 变成 ( 1 , b a , v a ) (1,\frac{b}{a},\frac{v}{a}) (1,ab,av)。
然后就扔掉第一维,剩下两维建坐标系发现有用的点是一个凸壳。
使用一些可持久化的东西动态维护这个凸壳就行了。
具体方法和细节还不会,咕咕咕