摘要:
注:以下例题的修改和查询操作都是与树的点权有关,若与边权有关也是类似的做法只需要在细节上略微修改即可。 例题 1 $n$ 个节点的树,$m$ 次操作,单点加,子树求和,$n,m \le 5 \times 10^6$。 DFS 序转化为序列上单点加,区间求和。 例题 2 $n$ 个节点的树,$m$ 次 阅读全文
摘要:
基数排序 1 const int N = 1e5 + 10; 2 int n, a[N]; 3 4 void radix_sort(unsigned int *a, int l, int r) 5 { 6 const unsigned int D = 1 << 16, k = D - 1; 7 st 阅读全文
摘要:
ABC003D(Difficulty:2033) 部分分 $D+L=X\times Y$ 答案显然为 $(R-X+1)\times (C-Y+1)\times\dbinom{X\times Y}{D}$。 考虑分成没有卡到上方、下方、左侧、右侧的四个集合,容斥出答案即可,代码用四位二进制数实现比较简 阅读全文
摘要:
爬山算法在单峰函数中比较优秀,但是当函数不是单峰时很容易陷入局部最优解,此时需要用模拟退火(Simulate Anneal)。 一般来讲,当问题规模非常巨大常规算法难以解决且求的是最优解问题,或者是你根本不会正解想要骗分时,模拟退火非常好用。 模拟退火关键在于几个参数:初始温度 $t_0$,终止温度 阅读全文
摘要:
P1177 【模板】快速排序 基数排序,时间复杂度为 $O((n+d)\log_d{V})$,一般 $n\ge10^5$ 取 $d=2^{16}$ 很优秀,可以将 $\log_d{V}$ 看成是一个很小的常数。 注意序列存在负数时要先区分出正数和负数,分别进行基数排序。 1 const int N 阅读全文
摘要:
1、Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics) A 注意最多只能跳一次。 1 const int N = 110; 2 int t, n, l, r, a[N]; 3 4 int main( 阅读全文
摘要:
1、AtCoder Beginner Contest 242 A 注意排名在 $B$ 之后就没有 T-shirt 了。 1 int main() 2 { 3 int a, b, c, x; read(a, b, c, x); 4 if (x <= a) printf("%.10lf", 1.0); 阅读全文
摘要:
1、牛客小白月赛45 A 注意即使跳不到对面也得跳一次。 1 int main() 2 { 3 int x, n; read(x, n); 4 cout << (n > x ? x : 1ll * n * x); 5 fwrite(pbuf, 1, pp - pbuf, stdout); retur 阅读全文
摘要:
1、XR0210 T1:U105209 拼数(P1012 [NOIP1998 提高组] 拼数) 将数字串按照 $a+b>b+a$ 排序,如何证明全序关系?即求证:若 $a+b>b+a$,$b+c>c+b$,则 $a+c>c+a$。 证明: 设 $a$ 的位数为 $x$,$b$ 的位数为 $y$,$c 阅读全文
摘要:
315. 旅行 需要记录每个前缀的每个字符的最后一次出现位置来优化 DFS 输出方案。 1 const int N = 85, S = 26; 2 string s, t; 3 int ans, a[N][S], b[N][S], dp[N][N]; 4 vector<string> res; 5 阅读全文