Link

代码可以在loj上看我的提交记录。

Day 1

[LOJ6029]市场

对于一次除法操作,若区间内所有数的减少量均相同则可视作区间减法,否则暴力递归下去。显然一个线段树节点只会被暴力递归进去\(\log(\text{Max-Min})\)次。对每个点定义势能函数,每次暴力递归都会减小势能,而修改操作只会使\(\log n\)个节点恢复原势能,所以复杂度\(O((n+m\log n)\log a)\) 。

[LOJ6030]矩阵

显然需要构造出一行全黑,然后用这行全黑去覆盖剩下所有非全黑行即可。

考虑把第\(i\)行构造成全黑。只需要第\(i\)列上有黑色就可以一个一个地全部覆盖成黑色,否则若第\(i\)行原本至少存在黑色则可以先用一次操作让第\(i\)列有黑色。

可以发现无解当且仅当不存在黑色。

[LOJ6031]字符串

首先观察到\(qk\le10^5\) 。

如果\(k\)较小,则可以\(k^2\)地计算\(w\)的每个子串在\(s\)中的出现次数,再算一下对\(w\)的所有询问中每个子串分别被问了多少次,复杂度\(O(qk^2)\)。

如果\(k\)较大,那么可以对所有串建广义\(\text{SAM}\),然后暴力枚举每次询问,倍增定位出当前询问区间对应子串的后缀自动机节点,复杂度\(O(qm\log n)\)。

将上述两者结合即可。

Day 2

[LOJ6032]水箱

根据隔板高度可以建出一个\(2n-1\)个点的树形结构,可以将每个要求倍增定位到树上节点,然后就是一个简单树\(dp\),记\(f_{i,0/1}\)表示\(i\)号点是否被水淹没时最多可满足的要求数目,在每个点内按要求的高度排序,贡献是前缀\(1\)的数量加上后缀\(0\)的数量。

[LOJ6033]棋盘游戏

经典的二分图博弈模型。对所有空格做二分图匹配,若某个点一定在最大匹配中则从该点出发先手必胜,否则后手必胜。由于点数较多所以需要用网络流实现二分图匹配。

[LOJ6034]线段游戏

李超线段树模板题。

Day 4

[LOJ6035]洗衣服

求出\(f_i,g_i\)分别表示洗干净/烘干前\(i\)件衣服的最短时间,那么答案就是\(\min_{i=1}^n\{f_i+g_{n-i+1}\}\)。

[LOJ6036]编码

对每个串设\(0/1\)变量表示问号处填什么,把所有串(含问号的串填上\(0/1\)后分别)插入\(\text{Trie}\)树,向路径上的点连边。需要注意的是\(\text{Trie}\)树上同一个节点内最多只能有一个取值为真,可以使用类似UOJ210寻找罪犯的方法优化建边。

Day 5

[LOJ6038]远行

两棵树合并以后新树直径的两端点一定是原来两棵树直径四个端点中的两个。所以直接\(\text{LCT}\)维护连通块内直径即可。

[LOJ6039]珠宝

设\(f_{i,j}\)表示考虑完售价小于等于\(i\)的珠宝,花费\(j\)能够获得的最大收益。对于售价相同的所有珠宝肯定是优先选价值收益最大的,所以转移函数是凸的,那么就决策单调性搞搞,复杂度\(O(mk\log m)\) 。

[LOJ6040]矩阵

首先求出矩阵\(C\)的秩\(r\),对于所有秩为\(r\)的矩阵它们的答案都是一样的,所以就只需要求出“有多少对矩阵\((A,B)\)相乘得到的矩阵\(C\)的秩为\(r\)”后把答案除以秩为\(r\)的矩阵个数就行了。

设\(f_{i,j}\)表示一个\(i\times n\)的矩阵其秩为\(j\)的方案数。这个\(dp\)可以在\(O(n^2)\)的时间内完成。

然后考虑设\(A\)的秩为\(x\),那么能够组成的\(C\)就有\(f_{x,r}\)种,而组成同一种\(C\)的\(B\)均有\(2^{n(n-x)}\)种,因此答案为\(\sum_{i=r}^nf_{n,i}f_{i,r}2^{n(n-x)}\),最后再除个\(f_{n,r}\) 。

Day 7

[LOJ6041]事情的相似度

\(\text{YCB}\)冬令营模拟搬的题目,要是再晚两天考的话应该就做到了吧。

考场上写的是\(\text{SAM+LCT}\)然后离线询问按右端点挂链,\(\text{BIT}\)维护后缀最小值。具体来说就是两前缀的\(\text{lcs}\)就是它们在前缀树(正串建\(\text{SAM}\)构出的\(\text{parent}\)树)上的\(\text{lca}\)的\(\text{len}\)值,所以相当于是要求区间内任两点的\(\text{lca}\)的\(\text{len}\)的最大值。从左往右枚举右端点,每次相当于做一个\(\text{access}\)操作,用\(\text{LCT}\)实现。

把树状数组换成可持久化线段树可以做在线。貌似还有一种\(\text{SAM+dsu}\)的做法。

[LOJ6042]跳蚤王国的宰相

令\(S=\lfloor\frac n2\rfloor\)。

一个点要作为重心,就要求它的每个子树大小不超过\(S\)。显然只有原重心所在的子树会不满足这一条件,所以考虑把这一部分的大小砍到\(S\)以下。

显然只会割原重心的相邻边,贪心优先割大的。同时有一个结论是所有点除原重心外答案相差不超过\(1\) 。

[LOJ6043]蛐蛐国的修墙方案

考虑\(i\)向\(p_i\)连边,这样的图一定是由若干个环构成,且每个点的度数为\(2\)。因此为了有解,每个环的大小都应为偶数,且选取方案有且仅有两种(考虑一条边选或不选,其余的边随之确定)。

这样就可以做到\(O(2^{\frac n2}n)\)的搜索复杂度。考虑到当环大小为\(2\)时,在左边放左括号一定不会更劣,所以就只需要考虑所有大小大于等于\(4\)的环即可,复杂度\(O(2^{\frac n4}n)\)。

Day 8

[LOJ6044]共

实际上就是左侧\(k\)个点右侧\(n-k\)个点的完全二分图生成树计数。给点标号还需要乘上一个\(\binom {n-1}{k-1}\)。

完全二分图生成树计数可以用矩阵树定理列出基尔霍夫矩阵后手解行列式,算出来结果是\((n-k)^{k-1}k^{n-k-1}\)。

[LOJ6045]价

先求出任意一组完美匹配,为了使左右两边选的点数相同,如果左边的\(i\)点选了,其一条出边指向右边的\(j\)点,那么\(mat_j\)这个左边的点也一定要被选。

“\(x\)选了\(y\)就一定要被选”,这是最大权闭合子图的经典模型。最小割即可。

[LOJ6046]爷

\(\text{dfs}\)序转区间。分块暴力,定期重构。

建块的时候保证块内极差不超过\(10T\),且块的长度不超过\(T\),块内以值域为下标维护前缀和。

查询就先二分答案再查区间内有多少个数\(\le k\)。

Day 10

[LOJ6047]决斗

找一个位置\(x\)使得没有人会从\(x-1\)走到\(x\)。可以令每个位置上的值为\(A_i\)指向这一位置的精灵数量\(-1\),然后前缀和一下最小值出现的位置就是\(x-1\),其后面一个位置就是\(x\)。

然后就从\(x\)出发走,用一个\(\text{std::set}\)维护当前可自由选择的精灵集合,类似田忌赛马那样操作即可。

[LOJ6048]数列

因为求的是严格上升,所以可以把数列反过来再在前面写一遍,然后直接求最长上升子序列就是第一问的答案。

第二问,对最长上升子序列记个数,再乘上\(2^{n-maxlen-1}\)即可。

Day 11

[LOJ6052]DIV

复数的条件是\(ac-bd=n,ad+bc=0\)。

令\(a=px,b=qx,c=py,d=-qy(x,y,p\in N^+,q\in N,(x,y)=1,(p,q)=1)\),那么就有\(n=xy(p^2+q^2)\)。

我们要求的是\(\sum_{xy(p^2+q^2)=n,(p,q)=1}px\)。实际上还要当\(q\neq0\)时要乘\(2\),因为这里只枚举了\(b>0\)的复数,而\(b<0\)的显然是对称的。

考虑转化一下\(\sum_{(p^2+q^2)|n,(p,q)=1}p\sum_{x|\frac{n}{p^2+q^2}}x=\sum_{(p^2+q^2)|n,(p,q)=1}p\times\sigma(\frac n{p^2+q^2})\)。

把\(1\)到\(n\sum\)起来答案是

\[\sum_{i=1}^n\sum_{(p^2+q^2)|i,(p,q)=1}p\times \sigma(\frac i{p^2+q^2})\\=\sum_{i=1}^n\sigma(i)\sum_{p^2+q^2\le\lfloor\frac ni\rfloor,(p,q)=1}p\]

然后把\((p,q)=1\)这个限制反演掉就是

\[\sum_{d=1}^{\sqrt n}d\mu(d)F(\frac {n}{d^2})\]

\[F(n)=\sum_{i=1}^n\sigma(i)\sum_{p^2+q^2\le\lfloor\frac ni\rfloor}p\]

对于所有要计算的东西,预处理其前\(n^{\frac 23}\)项,剩下的暴力并记忆化,复杂度就对了吧。

[LOJ6029~6052]雅礼集训 2017 选做的更多相关文章

  1. loj6029 「雅礼集训 2017 Day1」市场

    传送门:https://loj.ac/problem/6029 [题解] 考虑如果有一些近似连续的段 比如 2 2 2 3 3 3,考虑在除3意义下,变成0 0 0 1 1 1,相当于整体-2 又:区 ...

  2. LOJ6029「雅礼集训 2017 Day1」市场 (线段树)

    题面 从前有一个学校,在 O n e I n D a r k \rm OneInDark OneInDark 到任之前风气都是非常良好的,自从他来了之后,发布了一系列奇怪的要求,挟制了整个学校,导致风 ...

  3. 【LYOI 212】「雅礼集训 2017 Day8」价(二分匹配+最大权闭合子图)

    「雅礼集训 2017 Day8」价 内存限制: 512 MiB时间限制: 1000 ms 输入文件: z.in输出文件: z.out   [分析] 蛤?一开始看错题了,但是也没有改,因为不会做. 一开 ...

  4. 「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心)

    题面 来源 「 雅 礼 集 训 2017 D a y 7 」 跳 蚤 王 国 的 宰 相   传 统 2000   m s 1024   M i B {\tt「雅礼集训 2017 Day7」跳蚤王国的 ...

  5. LOJ_6045_「雅礼集训 2017 Day8」价 _最小割

    LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...

  6. loj #6046. 「雅礼集训 2017 Day8」爷

    #6046. 「雅礼集训 2017 Day8」爷 题目描述 如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 …… 在第 63 回战车道全国高中生大赛中,军神西住美穗带领 ...

  7. 「雅礼集训 2017 Day7」事情的相似度

    「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点 ...

  8. 「雅礼集训 2017 Day2」解题报告

    「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...

  9. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

随机推荐

  1. Android中如何实现EditText的自动换行

    要实现EditText的自动换行需要实现如下设置: <EditText android:id="@+id/function_lifingcost_edit_txtRemark" ...

  2. English trip -- VC(情景课)3 B Bamily members

    xu言: 今天,好困啊 -__-. . zZ 早点睡吧...适当的休息,才能更好的学习 Vocabulary focus  husband wife uncle aunt brother sister ...

  3. 20170801xlVBA含有公式出现弹窗合并

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Sub GatherD ...

  4. Ubuntu 18.04 install JDK8.201

    sudo add-apt-repository ppa:webupd8team/java Press Enter to continue. sudo apt update sudo apt insta ...

  5. 『PyTorch』第十四弹_torch.nn.Module类属性

    nn.Module基类的构造函数: def __init__(self): self._parameters = OrderedDict() self._modules = OrderedDict() ...

  6. 『OpenCV3』处理视频&摄像头

    在opencv中,摄像头和视频文件并没有很大不同,都是一个可以read的数据源,使用cv2.VideoCapture(path).read()可以获取(flag,当前帧),对于每一帧,使用图片处理函数 ...

  7. dp入门:最长不下降序列

    #include "bits/stdc++.h" using namespace std; ],dp[]; int main() { int n; cin >> n; ...

  8. ORA-14452:试图创建,更改或删除正在使用的临时表中的索引

    因为表kol_xx_fin050_temp 为临时表,而且有其他session正在使用. select vs.* from v$session vs , v$lock vl , dba_objects ...

  9. OAF中下载附件之后页面失效,报过时的数据异常,浏览器后退异常

    我在使用了下载功能之后,再往页面添加行或进行保存,页面老是报浏览器后退的异常. 猜测是因为我的下载按钮使用的submitButton,它隐式的包含了一个submit动作,且我在代码中有一个Commit ...

  10. 浅析postgresql数据库事务及行锁特征

    开源数据库领域,postgresql以其优越的性能.功能及良好的稳定性排名首位可谓当之无愧,尤其是对高并发的支持可谓匠心独具.而优越的性能和稳定性,究其根本无非是良好的基础架构,本文将对其性能和稳定性 ...