摘要: 这里写的是线段树套权值线段树和 set. 写代码的时间大概是 40 min,然后调试时间是 10 分钟左右,感觉这种数据结构题写的时候仔细检查的话还是比较好调的. code: #include <bits/stdc++.h> #define ll long long #define N 50009 阅读全文
posted @ 2020-06-10 20:56 EM-LGH 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 感觉是比较基础的子集 DP. 令 $dp[S]$ 表示点集 $S$ 构成的价值和,然后枚举最后一个区域就行. 也就是 $dp[S]=\sum_{T \subseteq S } dp[S-T] \times (\frac{sum[T]}{sum[S]})^k$ 化简得 $dp[S] \times su 阅读全文
posted @ 2020-06-10 15:45 EM-LGH 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 满分做法需要用到很神仙的优化方式,这里只给出 部分分的做法. 想出了 70pts 做法还是十分开心的. 开始的时候先想了一个 35 pts 做法: 考虑连续段,那么连续段的长度不会超过 $K$,高度不会超过 $K$,所以 $K \leqslant 9$ 的状态都能搜出来. 然后令 $f[i]$ 表示 阅读全文
posted @ 2020-06-10 11:33 EM-LGH 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 朴素的矩阵乘法时间复杂度会爆炸,但是我们发现矩阵乘法的形式是一个 $(1 \times n) \times (n \times n)$ 的形式. 所以如果提前预处理出来 $(n \times n)$ 矩阵的 $2^i$ 次幂,然后每次询问的时候二进制拆分,复杂度就是 $O(n^2 \log 1e9) 阅读全文
posted @ 2020-06-10 10:02 EM-LGH 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 由于集合内的数不能有交集,所以显然是子集 dp 的形式. 但是这道题为了不算重不太能用 FWT 优化,直接暴力 dp 的话是 $O(3^{18})$ 的,洛谷上开 O2 能过. 转移 DP 的时候一定注意是 $many[i] \times f[j]$,而不是 $f[i] \times f[j]$,否 阅读全文
posted @ 2020-06-10 09:21 EM-LGH 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 终于 get 到了子集卷积的正确姿势,以前竟然都是用异或卷积写的. 众所周知,异或卷积由于涉及到乘法所以会比较慢,那我们用或卷积就好了! code: #include <bits/stdc++.h> #define N (1<<21) #define ll long long #define mod 阅读全文
posted @ 2020-06-10 08:35 EM-LGH 阅读(180) 评论(0) 推荐(0) 编辑