摘要: 一、定义 随机堆是一种时间复杂度与左偏树相近,代码巨短的可并堆。随机数完胜 dis 数组。 二、一些基本操作 合并 \(x\) 和 \(y\)。 int merge(int x,int y){ if(!x||!y) return x|y; if(val[x]>val[y]) swap(x,y); i 阅读全文
posted @ 2026-07-24 20:10 yanzixuan2024 阅读(5) 评论(0) 推荐(0)
摘要: 猜结论还是挺好玩的。 A. 弹弓 人类智慧。寻找前 \(1200\) 和后 \(1200\) 个的最小代价可以通过。赛后测了最小大约 \(400\) 也可。 #include<bits/stdc++.h> using namespace std; const int N=1e5+5; struct 阅读全文
posted @ 2026-07-19 21:00 yanzixuan2024 阅读(2) 评论(0) 推荐(0)
摘要: 题目传送门 题目描述 给出 \(n\)、\(m\) 和序列 \(c\)。 可以分多行,一行如果要打印 \(l\) 到 \(r\) 的单词,代价是 \(m+\left(\sum_{i=l}^{r}c_i\right)^2\)。 求最小代价和。 第一步肯定是把 \(c\) 做一遍前缀和。 朴素 \(O( 阅读全文
posted @ 2026-07-19 20:24 yanzixuan2024 阅读(3) 评论(0) 推荐(0)
摘要: 题目传送门 题目描述 给出 \(n\) 和 \(a\),\(a\) 可以改变顺序。把它们分成 \(m\) 堆,每一堆的价值为极差的平方。求最小价值和。 第一步肯定是把它排序。 容易写出朴素 \(O(n^2m)\) dp。 \[dp_i=\min_{0\le j<i}dp_j+(a_i-a_{j+1} 阅读全文
posted @ 2026-07-19 19:57 yanzixuan2024 阅读(3) 评论(0) 推荐(0)
摘要: 这里就记一下推导过程。 前置芝士: 伯努利数:\(B_i\)。 定义: \[\frac{x}{e^x-1}=\sum_{i=0}^{\infty}B_i\frac{x^i}{i!} \]\[e^x=\sum_{i=0}^{\infty}\frac{x^i}{i!} \] 记 \[S_k(n)=\su 阅读全文
posted @ 2026-07-18 22:31 yanzixuan2024 阅读(4) 评论(0) 推荐(0)
摘要: 怎么写倍增啊。。。 A. 调度奶牛 反悔贪心。直接贴代码了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e4+5; int n,sum; struct node{int g,d;}a 阅读全文
posted @ 2026-07-16 22:38 yanzixuan2024 阅读(5) 评论(0) 推荐(1)
摘要: 点击跳转Pólya 定理合集 阅读全文
posted @ 2026-07-15 22:17 yanzixuan2024 阅读(4) 评论(0) 推荐(0)
摘要: 点击跳转斜率优化合集 阅读全文
posted @ 2026-07-15 22:16 yanzixuan2024 阅读(4) 评论(0) 推荐(0)
摘要: 完了,数位 dp 太差了。 A. 奶牛赛跑 求一个序列 \(a\) 最少可以划分成几个上升子序列。 用 set 维护每个上升子序列的最后一个元素。每次插入 \(a_i\) 时放在第一个大于等于它的位置。如果没有,那么就要多分一个子序列了。 #include<bits/stdc++.h> using 阅读全文
posted @ 2026-07-15 21:57 yanzixuan2024 阅读(6) 评论(0) 推荐(0)
摘要: 又 AK 了。可惜不是第一 AK。 A. 访问小伙伴 最大生成树。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5; struct node{int u,v,w;}e[N]; i 阅读全文
posted @ 2026-07-14 21:40 yanzixuan2024 阅读(4) 评论(0) 推荐(0)