学习记录

2019.1

2019.1.28

  去学习了一下 QFT 和 quantum phase estimation algorithm。

【集训队作业2018】【UOJ443】

  直接上 quantum phase estimation algorithm 就好了。

2019.1.31

  打了场 Codeforces Round #536 (Div. 2),又垫底了。

2019.2

2019.2.3

【WC2019】【LOJ2983】数树

  题解

【WC2019】【LOJ2985】I 君的商店

  最暴力的方法:
   先用 \(2n\) 次操作找出一个 \(1\)
   然后每次选择两个数 \(x,y(x\leq y)\),拿 \(x+y\)\(1\) 比。
   如果 \(x+y\leq 1\),那么 \(x=0\);否则 \(y=1\)
   这样就可以用 \(5n\) 次操作确定所有数。
   总的操作次数约为 \(7n\)

  正解:
   先不找 \(1\),随便找一个数 \(z\)
   还是每次选两个数 \(x,y(x\leq y)\),拿 \(x+y\)\(1\) 比。
   如果 \(x+y\leq z\),那么 \(x=0\);否则 \(y\geq z\),这时候拿 \(y\) 去代替 \(z\)
   这样就可以用 \(5n\) 次操作确定出一堆 \(0\)、一条链和一个数。
   然后在链上二分就好了。
   总的操作次数约为 \(5n+3\log_2 n\)

  打了场 CodeCraft-19 and Codeforces Round #537 (Div. 2),又垫底了。

2019.2.7

  打了场 Codeforces Global Round 1,又垫底了。

2019.2.10

  打了场 Codeforces Round #538 (Div. 2),又垫底了。

2019.2.15

  打了场 牛客练习赛40,又垫底了。

2019.2.25

  打了场 USACO 2019 February Contest, Bronze,又垫底了。

  打了场 USACO 2019 February Contest, Silver,又垫底了。

  打了场 USACO 2019 February Contest, Gold,又垫底了。

2019.2.26

  打了场 USACO 2019 February Contest, Platinum,又垫底了。

2019.3

2019.3.2

  打了场 洛谷3月月赛,又垫底了。

【LUOGUP5241】序列

  烤仓鼠真好吃。
  把SCC缩成一个点后,一条链+一堆点组成的图就可以构造出所有的序列。
  为了让不影响SCC个数的边数最多,肯定是让这条链的第一个SCC包含很多个点,剩下的SCC只包含一个点。
  考虑DP:\(f_{i,j,k}\) 为加了 \(i\) 条边后,链上有 \(j\) 个SCC,除了这条链外还有 \(k\) 个点的方案数。
  每次可以选择把前若干个SCC缩到一起。如果 \(k>0\),就可以把一个点接到链的最后端,否则可以加一条不影响SCC的边。
  直接做的复杂度是 \(O(n^4)\) 的。
  可以发现,当 \(i>2n\) 时只有 \(k=0\) 时的值才 \(\neq 0\)
  这样就可以把复杂度降到 \(O(n^3)\) 了。

2019.3.5

【USACO 2019 February Contest, Platinum】Mowing Mischief

  先把走到每个点的最多步数算出来,然后把步数相同的点分到一组,记为 \(g(i)\)。显然对于同一组中的点 \(i,j\),若 \(x_i>x_j\)\(y_i<y_j\)
  对于相邻两组DP一下,转移为:
\[ f_i=\min_j (f_j+(x_i-x_j)(y_i-y_j))~~i\in g(k),j\in g(k-1) \]
  考虑 \(q_1,q_2\in g(k-1),x_{q_1}<x_{q_2},p_1,p_2\in g(k),x_{p_1}<x_{p_2}\),有:若 \(q_1\) 转移到 \(p_1\)\(q_2\) 转移到 \(p_1\) 要优,则 \(q_1\) 转移到 \(p_2\)\(q_2\) 转移到 \(p_2\) 要优。(这个把式子拆开算一下就好了)
  记 \([l_i,r_i]\)\(i\in g(k-1)\) 可以转移到的 \(g(k)\) 中的区间。显然任意两个 \([l_i,r_i],[l_j,r_j]\) 不互相严格包含。(这里严格包含指的是包含且左端点不同且右端点不同)
  我们可以把 \(g(k)\) 切成若干个区间,满足 \([l_i,r_i]\) 不被任意一个区间严格包含,且 \([l_i,r_i]\) 最多与两个区间相交。
  方法如下:对于一个区间的左端点,找到最右的右端点使得这个区间不严格包含任何 \([l_i,r_i]\)。可以证明,这个方法满足条件。
  这样,一个 \([l_i,r_i]\) 一定是一个区间的前缀或后缀,分两部分DP一下就好了。DP过程类似决策单调性优化DP(不过是反过来的)。
  官方题解

2019.3.30

  打了场 USACO 2019 US Open Contest, Platinum,又垫底了。

  打了场 计蒜客的比赛,又垫底了。

2019.4

2019.4.13

  打了场奇怪的 2050 Programming Competition,又垫底了。

2019.4.21

【BJOI2019】奥术神杖

  先取个对数,然后就是经典套路了:二分答案,在 AC 自动机上面DP就好了。

【BZOI2019】勘破神机

  你可以打个表然后 BM,可以找到一个长度为 \(O(k)\) 的递推式。
  你也可以推通项公式,然后就可以直接算了。
  当 \(m=2\)
\[ \begin{align} f_n&=ar^n+bs^n\\ f_n^k&=(ar^n+bs^n)^k\\ &=\sum_{i=0}^k\binom{k}{i}a^ir^{in}b^{k-i}s^{n(k-i)}\\ &=\sum_{i=0}^k\binom{k}{i}a^ib^{k-i}(r^is^{k-i})^n \end{align} \]
  然后等比数列求和就好了。

2019.4.22

【BJOI2019】排兵布阵

  直接 \(O(snm)\) 背包就好了。

【BJOI2019】光线

  设从第 \(i\) 个玻璃射向第 \(i+1\) 个玻璃的光的总量是 \(f_i\),从第 \(i+1\) 个玻璃射向第 \(i\) 个玻璃的光的总量是 \(g_i\)
  那么有方程:\(f_{i+1}=a_if_i+b_ig_i,g_{i-1}=a_ig_i+b_if_{i-1}\),其中 \(f_0=1,g_n=0\)
  移一下项就可以得到 \(f_i,g_i\) 关于 \(f_{i-1},g_{i-1}\) 的表达式。
  用 \(g_0\) 表示所有其他的变量,然后把 \(g_n=0\) 带进去就可以得到所有的值。

【BJOI2019】删数

  有一个很容易发现的结论:假设有 \(c_i\)\(i(1\leq i\leq n)\),那么答案就是 \(n-(\) 所有 \([i-c_i+1,i]\) 的并对 \([1,n]\) 求交之后的长度)。
  拿个线段树维护区间并就好了。

2019.4.27

  打了场 计蒜客的比赛,又垫底了。

2019.4.28

【LOJ6608】无意识的石子堆

  先建一个二分图,环和链分开算
  环的很好算,随便推一推就退出来了(不用卷积)。
  \(f_i=\sum_{j\leq i-2}i(i-1)^2(i-2)^2\cdots(j+1)^2f_j\)
  一条链的方案数是 \(g^1_0=1,g^1_i=\frac{i(i+1)}{2}\)
  构造一个生成函数 \(G^1(x)=\sum_{i}\frac{g^1_ix^i}{i!(i+1)!}\)
  这样 \((G^1(x))^2=G^2(x)=\sum_i\frac{g^2_ix^i}{i!(i+2)!}\)
  \(G^k(x)=\sum_{i}\frac{g^k_ix^i}{i!(i+k)!}\)
  然后容易算出 \(G^k(x)=(\frac{2-x}{2(1-x)})^k\)
  最后 \(g^k_i\) 的系数要除以 \(k!\)(因为有 \(k!\) 种加入顺序)
  答案为 \(s=\sum_i f_ig_{n-i}\binom{n}{i}\binom{m}{i}\)

2019.4.29

【XSY2056】吃特色菜

  题目大意:给你 \(n,l,x,k\),你要选出 \(6\) 个整数,满足 \(1\leq a_1\leq a_2\leq a_3\leq a_4\leq a_5\leq x<l\leq a_6\leq n\),且同一个数最多选 \(k\) 个,且 \(\sum_{i=1}^5a_i>a_6\)\(n-l\leq 100,n\leq {10}^9\)
  枚举最大的数,然后数位DP,记 \(f_{i,j,k,0/1,0/1}\) 为考虑了最 \(i\) 个二进制位,只考虑这些位的情况下,这 \(5\) 个数的大小关系为 \(j\),进位为 \(k\),最大的数与 \(x\)的大小关系为 \(0/1\),和与 \(a_6\) 的大小关系为 \(0/1\) 的方案数。

2019.5

2019.5.4

【LUOGUP5348】密码解锁

  题目大意:给你 \(n',m\),有 \(\sum_{i\mid j}a_j=\mu(i)[i\leq n']\),求 \(a_m\)\(m\leq {10}^9,\frac{n'}{m}\leq {10}^9\)
  先莫比乌斯反演一下,令 \(n=\frac{n'}{m}\)。那么 \(a_m=\sum_{i=1}^n\mu(i)\mu(im)=\mu(m)\sum_{i=1}^n[\gcd(i,m)=1]\mu^2(i)\)
  考虑无平方因子数是怎么算的,就是枚举每个完全平方数 \(i^2\),然后计算 \(i^2\) 的倍数,容斥一下。
  对于一个完全平方数 \(i^2\),如果 \(\gcd(i,m)=1\),那么 \(\gcd(i^2j,m)=\gcd(j,m)\),就只用求 \(\sum_{j=1}^\frac{n}{i^2}[\gcd(m,j)=1]\),再莫比乌斯反演一下就能算了;如果 \(\gcd(i,m)\neq 1\),那么 \(\gcd(i^2j,m)\neq 1\),贡献就是 \(0\) 了。
  复杂度不会算。上限是 \(O(\sqrt n\sigma_0(m))\) 。预处理前 \(S\) 项的话复杂度是 \(O(S+\sqrt{\frac{n}{S}}\sigma_0(m))\)

【LUOGUP5349】幂

  题目大意:给 \(n,f(x),q\),求 \(\sum_{k=0}^\infty f(k)q^k\bmod p\)\(n\leq {10}^5,0<q<1\)\(p\) 是一个模数,
  解法一:
   令 \(f_k=\sum_{i=0}^\infty i^kq^i\),那么
\[ \begin{align} qf_k&=\sum_{i=0}^\infty i^kq^{i+1}\\ (1-q)f_k&=q\sum_{i=0}^\infty((i+1)^k-i^k)q^i\\ &=q\sum_{i=0}^\infty \sum_{j=0}^{k-1}\binom{k}{j}i^jq^i\\ &=q\sum_{j=0}^{k-1}\binom{k}{j}\sum_{i=0}^\infty i^jq^i\\ &=q\sum_{j=0}^{k-1}\binom{k}{j}f_j\\ f_k&=\frac{q}{1-q}\sum_{i=0}^{k-1}\binom{k}{i}f_i\\ \frac{f_k}{k!}&=\frac{q}{1-q}\sum_{i=0}^{k-1}\frac{f_i}{i!}\frac{1}{(k-i)!}\\ \frac{1}{1-q}F(x)&=\frac{q}{1-q}F(x)e^x+\frac{1}{1-q}\\ F(x)&=qF(x)e^x+1\\ F(x)&=\frac{1}{1-qe^x} \end{align} \]
  解法二:
\[ ab+(a+d)bq+(a+2d)bq^2+\cdots\\ =b(a(1+q+q^2+\cdots)+d(q+2q^2+3q^3+\cdots))\\ =\frac{ab}{1-q}+\frac{bd}{(1-q)^2} \]
   咕咕咕。

2019.5.25

  打了下 APIO2019 网络赛。

【APIO2019】A

  打一下表(或者找规律),就可以发现循环节为 \(\frac{\frac{AB}{\gcd(A,B+1)}}{}\),且每个循环节内的数对互不相同。

【APIO2019】C

  三维数点送分题。

2019.5.26

  打了一下计蒜之道初赛。

【计蒜客】上升子序列

  题目大意:给一个序列,你要把它划分为两个上升子序列,问两个子序列长度之差最小是多少。\(n\leq {10}^5\)
  先把无解的情况判掉,然后把这个序列划分为若干段,每段包含两个上升子序列且每段划分上升子序列的方案是唯一的,并且每一段的最小值大于前一段的最大值。然后每个子序列可以选每段中的任意一部分,直接分治 FFT 就好了。复杂度 \(O(n\log^2n)\)

2019.6

2019.6.16

  打了一下计蒜之道复赛,又垫底了。

2019.7

2019.7.19

  打了一场NOI,又垫底了。

2019.8

2019.8.24

  打了一下计算之道决赛,又垫底了。

posted @ 2019-01-31 23:28 ywwyww 阅读(...) 评论(...) 编辑 收藏