2020 CCPC Wannafly Winter Camp Day1

题目链接:https://ac.nowcoder.com/acm/contest/3979

B - 密码学

总结:看了一下题目,突然很好奇队友是怎么这么快过的,要是我写的话好像只会搞个高斯消元了。

队友的做法

把所有的修改操作离线,然后倒序所有的修改,因为每次操作的形式是:把第 \(x\) 行的数全部加给第 \(y\) 行,换言之就是 \(y'=x+y\) 。那么执行撤销操作就需要 \(y=y'-x\)

高斯消元的做法

每列是独立的,并且每列的变换矩阵还是同一个。单独抽出其中一列,比如只有2个元素。一开始的矩阵为单位矩阵,即每个元素只被自己影响。

\(\quad \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \quad\)

把第1行加给第2行:

\(\quad \begin{bmatrix} 1 & 0 \\ 1 & 1 \end{bmatrix} \quad\)

然后把最后的结果 \(('P'=41, 'Q'=42)\)

\(\quad \begin{bmatrix} 41 \\ 42 \end{bmatrix} \quad\)

作为常数接在右边,构成增广矩阵

\(\quad \begin{bmatrix} 1 & 0 & | & 41 \\ 1 & 1 & | & 42 \end{bmatrix} \quad\)

调用高斯消元接口就可以解出每个变量的值。

解一个增广矩阵的复杂度为 \(O(n^3)\) ,共 \(n\) 个增广矩阵,总复杂度为 \(O(n^4)\) 。但是对于同一个系数矩阵,配上不同常数项形成的增广矩阵,可以使用LU分解法,分解复杂度 $O(n^3) ,回代消元复杂度 \(O(n^2)\) ,总复杂度为 \(O(n^3)\) .

H - 最大公约数

打表题,打表可以发现结果,jls也有讲详细的证明。

F - 乘法

题解:给其中一维排序,然后二分答案x,再 \(O(nlogn)\) 统计有多少个比x小的。记得分正负数讨论,最好的办法是把正数和负数分开存。

I - K小数查询

jls的数据结构题。

A - 期望逆序对

昨天(2020/1/30)的Codeforces刚刚出?统计的方法有点点不同。

posted @ 2020-01-31 00:04  KisekiPurin2019  阅读(165)  评论(0编辑  收藏  举报