学习记录

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,又垫底了。

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