Blog E

路漫漫其修远兮,吾将上下而求索。

斯特林数学习笔记

怎么感觉组合数用 C 几几更方便写

第一类斯特林数 几何意义 把 n 各不同的数放进为 k 个环的方案数,用 $\begin{bmatrix}n\cr k\end{bmatrix}$ 表示。 代数意义 \[\begin{aligned} x^{\overline{n}}&=\sum_{i=1}^n \begin{bmatrix}n\cr i\end{bmatrix}x^i\cr x^{\underline{n}}&=\sum_{i=1}^n (-1)^{n-i}\begin{bmatrix}n\cr i\end{bmatrix}x^i \end{aligned}\] 计算方式 $O(nk)$ 递推:...

斜率优化学习笔记

顺便学了个李超树

问题形式 用来优化一类 dp,其转移方程满足: \[dp_i=f_i(\max_{j<i}(k_j\times x_i+b_j))\] (式子中取 min 也可,与 max 类似,不再赘述) 其中 $k_j,b_j$ 是只与 j 相关的数,$x_i$ 是只与 i 相关的数,$f_i$ 是只与 i 有关的函数。 斜率优化就是优化的求 $\max_{j<i}(k_j\times x_i+b_j)$ 的过程。

【题解】寿司晚宴

最优解!

upd 2021.6.18: 修改公式符号,更加形式化,添加 $50$ 分做法 upd 2022.7.30: 修改转移方程的笔误,修改公式符号 介绍一种 $O(n \times 3^8)$ 的做法,目前是所有非打表代码中的最优解,其实只是把其他题解中的算法优化了一下。 定义 $fac_i$ 表示 $i$ 的质因数集合 $P={x\mid x\ \text{is prime},\ x\le n}$ 暴力 1 这题的暴力有很多种,在此只介绍可以优化成正解的暴力。 两个数互质,等效于他们没有共同的质因子,所以只需把每个数都分解质质因数,如下 dp: ...

PKUSC游记

海星

Day 0 坐火车到余姚,晚上到余姚宾馆,颓了一会,复习了下教练说往年都考了的ntt和线段树合并,又打了一遍网络流和sa(然而都没用上),就睡觉了。 Day 1 到考场试机发现是windows系统,好在提供gvim安装包,不过由于我平时都用的是neovim,对gvim的配置不太熟,只好又现查了查,改了下之前背的vimrc。 第一题,发现每个矩阵只和它前一个矩阵每行每列的和有关,于是就推了下这个东西的递推方法,矩阵快速幂搞定因为交错题又wa又re的调了一个小时。 第二题,先写了个暴力,发现整体修改的部分分相当是把询问的l,r移一下,于是写了个st表,把询问离线之后从后往前,在单调...

一种很优雅的高斯消元写法

类似线性基

rt,自己胡出来的算法。用类似线性基的写法写,代码简短,常数小,并且对无解和无穷解的判断都很简单。 以下为毒瘤题 P2455 线性方程组 代码(之前用正常写法怎么都过不了,面向数据才过的。。): #include<bits/stdc++.h> using namespace std; const int MXN=105; const double eps=1e-8; int n; bool used[MXN]; double arr[MXN][MXN],tmp[MXN]; inline bool is0(double x){return fabs(x)<=eps;}...

USACO 2021 US Open 铂金组 T1 题解

想了挺久

United Cows of Farmer John 题意: 给定一个长度为 n 的数列 $a_i$,求符合下列条件的三元组 ${i,j,k}$ 个数: $1\le i < j < k \le n$ $a_i,a_j,a_k$ 的值在 $a_{[i,k]}$ 各只出现一次(即他们自己)。 思路: 为了方便描述,我们称 $a_i$ 为 i 点的颜色,记 $pre_i$ 表示 $a_i$ 的前驱(即 i 之前与 $a_i$ 相同的最后一个数),记集合 $last$ 表示右端点扫描到 r 时,每个颜色最后一次出现的位置。 朴素想法 考虑固定右端点 r,然后枚举左...

USACO 2021 US Open 金组题解

终于 AK 了!

T1 United Cows of Farmer John 思路 这题比较水,记 $pre_i$ 为 i 号奶牛的前驱(即 i 前面最靠后的与 i 号奶牛颜色相同的奶牛)。 令这两个奶牛领导中,在序列中靠后的那个为 i,考虑靠前的奶牛领导有几种可能,不难发现其个数为 $[pre_i+1,i-1]$ 这段区间内奶牛的种类数。于是直接上树状数组,用代表元法(将每种种类的最后出现位置加一)即可求出答案。复杂度 $O(n\log n)$ 代码 #include<bits/stdc++.h> using namespace std; #define fi first #def...

【题解】P3747 相逢是问候

麻烦得很

题意 定义函数 $f(x)=c^x$ 维护给定序列 $a_i$,支持两种操作(p,c 由输入给定): 将数列第 l 到 r 项中的每一项 $a_i$,赋值为 $f(a_i)$ 查询 $\sum_{i=l}^{i\leq r}a_i\ \pmod p$

【题解】洛谷二月月赛div2

25%的时间获得了自己100%的得分

这次月赛感觉考的海星,估计是 WC 爆炸时失去的 RP 又回来了吧。前一个小时多点把 abc 都切了,后面都没骗到分( T1 『MdOI R4』Fun 傻子题,直接模拟即可。 ll n,m,k; ll arr[MXN]; inline void solve(){ //codes cin>>n>>m>>k; for(int i=1;i<=n;i++) cin>>arr[i]; ll cnt=0; for(int i=1;i<=n;i++){ ll tmp; cin>>tmp; cnt+=tm...

【题解】P7287魔法

听说有1log做法?

题目在此:P7287 结论 所有的 1 操作一定在所有的 2 操作之前进行 每个 1 操作的范围一定是 [1,n] 每次 2 操作都是对当前序列的最大字段和那个区间进行的。 最终选的区间是最终序列的最大子段和 1,2,4 都很显然,3 结论可感性理解(这个野鸡博主不会证): 如果每次都选那个最大子段和进行操作,那得到的结果一定是最优的。 否则一旦在操作过程中有操作的区间不是最大子段和区间的话,在进行同样次操作之后的结果是不优的。 算法 现在,我们只需要知道 1 操作以及 2 操作的次数,就能算出最终数列的最大最大字段和。接着观察发现2操作的次数是不超过\(...

icon