首页 > 其他分享 >AT板刷记录

AT板刷记录

时间:2024-11-08 21:46:15浏览次数:1  
标签:记录 板刷 错因 sum times 枚举 dp rightarrow

我是彩笔,别人板刷AGC,我板刷ABC和ARC。/fad

ABC378

E - Mod Sigma Problem

注意到取模只对里面的 \(\sum\) 取,所以不能直接对每个数算贡献。考虑怎么把这个 \(\text{mod}\) 去掉,一般是要将其转化成大小比较的形式。现在只能尝试用前缀和改写和式为:\(\sum\limits_{1\le l\le r\le N}\left( (S_r-S_{l-1})\bmod M \right)\),发现内层的括号是可以去掉的,也就是可以直接对前缀和 \(\bmod M\),得到的结果就是:

\[\Large{ (S_r - S_{l-1}) \bmod M = S_r - S_{l-1} + \begin{cases} 0 & (S_{l-1} \leq S_r) \\ M & (S_{l-1} > S_r) \end{cases}} \]

发现 \(M\) 的个数就是 \(S\) 中逆序对的个数,剩下的 \(S_i\) 直接分开算贡献即可。

F - Add One Edge 2

显然环的端点在原树上要是二度点,中间点是三度点,那么要找到所有合法的链。考虑从每一个三度点的连通块入手,求出这个三度点连通块连了多少个二度点,贡献就是 \(\frac{cnt\times(cnt-1)}{2}\)。注意要求得到的图是简单图,所以不能算上相邻的二度点。

ABC377

E - Permute K times 2

首先应该想到的是数之间的移动会形成多个环,然后打表观察规律,你会发现第 \(i\) 位在第 \(j\) 次操作后的数就是原来的数在他所在的环上走 \(2^{j-1}\) 步到达的数。于是对 \(k\) 模环的长度就能知道最终的数。

错因:不该直接观察整个数列的变化规律,应该问题精确到具体的数上。

F - Avoid Queen Attack

比EG难。转化成有多少个格子被覆盖,考虑对每个皇后的每个方向的覆盖来讨论,会有很多重复的贡献,可以手动容斥掉,较复杂。

G - Edit to Match

修改末尾的编辑距离,容易想到答案是 \(len_i+len_j-2\times LCP\)。多个字符串,有关前缀,考虑字典树。记录下里每个节点最近的结尾字符的距离 \(f[rt]\),答案就是 \(f[rt]+n-i-1\)。

哈希做法就是对每个串哈希,直接枚举每个前缀对应的最短原串长度就行了,用 umap 维护即可。

错因:脑子笨没想到字典树。想到了哈希做法,但是复杂度想错了,总结为傻逼。

ABC376

E - Max × Sum

考虑按 \(a\) 从小到大排序,钦定最大值就是 \(a_i\),也就是 \((a_i,b_i)\) 是必选的,剩下要选前面 \(k-1\) 个数使得 \(\sum b_i\) 最小,这个可以用优先队列维护。

错因:没想到排序(

G - Treasure Hunting

贪心难题,自己做根本想不到。首先想到一个假贪心:直接每次都选概率最大的点走。这样显然是不对的,但是注意到对于没有先后选择关系的集合而言这个贪心就是对的。考虑能不能转化成若干个集合合并起来的形式,也就是树上的连通块。考虑已经走到了父节点 \(u\),有两个连通块 \(i,j\),记 \(val_i\) 表示遍历连通块的最小期望,\(siz_i\) 是连通块大小,\(p_i\) 是概率之和。如果要 \(i\) 比 \(j\) 先合并到 \(u\) 上,推导出要满足:

\[\Large{ \begin{align*} val_i+siz_i\times p_i+val_j & <val_j+siz_j\times p_j+val_i\\ \frac{siz_i}{p_i} & <\frac{siz_j}{p_j} \end{align*}} \]

于是可以用优先队列维护 \(\frac{siz_i}{p_i}\) 为关键字的连通块,每次合并信息,用个结构体封装一下。

总做法:先想不管先后关系的集合怎么做,然后考虑两个集合合并到答案上的先后关系,最有用优先队列来维护。

错因:没有想到转化成集合合并到答案上的先后关系。

ABC375

E - 3 Team Division

值域较小,考虑设 \(dp[i][j][k]\) 表示前 \(i\) 个人使得 A 组强度为 \(j\),B 组强度为 \(k\) 的最小操作次数。\(j,k\) 的上界是 \(m=\frac{sum}{3}\),转移式很简单,我都能秒,复杂度 \(O(nm^2)\)。

错因:一开始没想到只需要枚举两组的状态就行了。

F - Road Blocked

删边操作不好做,考虑时光倒流转化成加边,每次加边直接 \(O(n^2)\) 枚举每对点更新,具体来讲就是看 \(x\rightarrow u \rightarrow v \rightarrow y\) 还是 \(x \rightarrow v \rightarrow u \rightarrow y\) 还是仍然 \(x\rightarrow y\)。全源最短路直接Floyd预处理就行。

错因:不会时光倒流这个trick。

G - Road Blocked 2

要删边,很容易想到要从 \(1,n\) 都跑一遍最短路,然后判断 \([dis_{1,u}+w+dis_{v,n}=dis_{1,n}]\) 就可以知道这条边是否在某一条最短路上。但是实际上这条边要在每一条最短路上,所以我们考虑维护 \(1,n\) 到每个点的最短路方案数,如果同时满足 \([cnt_{1,u}\times cnt_{v,n}=cnt_{1,n}]\) 那么这条边就是必要的。注意方案数会很大,要对大质数取模。

错因:没想到计算方案数以及不会算方案数以及可以直接取模。

ABC374

E - Sensor Optimization Dilemma 2

最大的最小值,考虑二分答案。然后问题转化成对每个 \(i\) 求这个:两个物品 \(A,B\),买一个价值分别为 \(v1,v2\),代价为 \(w1,w2\),求最少用多少代价达到 \(K\) 价值。做法是枚举 \(A/B\) 的个数小于 \(v2/v1\) 然后直接算,这样相当于把枚举的那个物品当作是较劣的,复杂度 \(O(v1+v2)\)。

错因:不会转化后的做法。

F - Shipping

首先会看出来这是个dp,并且简单贪心想一下可以观察到每次处理的 \(K\) 的订单都是连续的,那么有一个朴素做法设 \(dp[i][j]\) 表示前 \(i\) 个任务在第 \(j\) 天完成的最小代价,转移是在第 \(j\) 天枚举完成的任务段 \([k,i]\)。但是时间是不可能直接作为状态的。

一个优化思路是只保留有用的时间作为状态,发现有意义的时间点一定能表示成 \(t_i+j\times X,j\in[0,i)\)。那么就可以设状态 \(dp[i][j][k]\) 表示前 \(i\) 个任务在 \(t_j+k\times X\) 时间做完。转移考虑填表法,枚举转移到第 \(i+l\) 个任务:

\[\Large{ \begin{cases} dp_{i+l,j,k+1}=\min(dp_{i,j,k}+(t_j+(k+1)\times X)\times l-(sum_{i+l}-sum_i)) & t_j+(k+1)\times X\ge t_{i+l} \\ dp_{i+l,i+l,0}=\min(dp_{i,j,k}+t_{i+l}\times l-(sum_{i+l}-sum_i)) & t_j+(k+1)\times X\le t_{i+l} \end{cases}} \]

按着转移来就行了。

错因:不会设状态优化。

G - Only One Product Name

显然是转化成图论问题考虑。先 \(O(n^2)\) 枚举 \(i,j\) 如果 \(i\) 第二个字符等于 \(j\) 第一个字符就连一条有向边,最后会出来一个一般有向图,问题转化成有向图最小路径覆盖。有几个注意点,首先图有环,考虑把强连通分量缩点。覆盖的路径可以相交,考虑做一遍传递闭包。然后就是经典模型:拆点,每条边 \((u,v)\) 表示左部的 \(u\) 连向右部的 \(v\),答案是总点数减二分图最大匹配数。

错因:赛时会了做法,但是没写过也不会写,时间也浪费了很多导致没写出来。差点能场切了/ll

标签:记录,板刷,错因,sum,times,枚举,dp,rightarrow
From: https://www.cnblogs.com/heshuwan/p/18535994

相关文章

  • AtCoder Beginner Contest 358 - VP记录
    Preface这次的动规题真的多,起码有三道都是。赛时做完ABCD以后就去攻G去了,可惜犯了煞笔错误搞WA了。赛后补F的时候思路代码啥的都挺顺的(没看题解独立切的蓝题),就是犯了更煞笔的错误,成消愁......
  • 11 月做题记录
    AT_arc153_c[ARC153C]±IncreasingSequence先赋值为\(1,2,3\ldotsn\),然后找到一个\(abs\)等于\(1\)且代价相反的即可。P7324[WC2021]表达式求值首先我们对于每个下标分开考虑,考虑预处理出来\(2^n\)种集合\(S\)每种集合最后为\(1\)的方案数,然后每位计算的时候......
  • Educational Codeforces Round 159 (Rated for Div. 2) - VP记录
    Preface重点策略:\[\large\textbf{\underline{先写简单好写的算法,再逐步修改优化}}\]十分有效,百试百灵,屡试不爽。A.BinaryImbalance当有相邻两字符不相等时,就可以不断向中间插入0。所以输出NO当且字符串全为1。点击查看代码#include<cstdio>usingnamespacestd;......
  • Blender 点线面基本操作记录
    框选工具切换长按框选工具,会出现菜单栏连续选按住Shift可以连续选择选择最短路径按住Ctrl,选择2个点,会自动选中这2个点之间的最短路径反选Ctrl+I可以在模型反选没有选中的点全选把鼠标放在想要全选点的模型上,按"L"循环选择把鼠标放在想要循环选择的点位上,按住Alt,在......
  • 记录STM32的GPIO 的坑 复用引脚PB3 PB4
    系列文章目录点击直达——文章总目录文章目录系列文章目录一、STM32的GPIO复用引脚PB3PB4二、关闭JTAG功能(PB3/4),只使用SWD(PA13/14)调试关于作者2024年11月3日,浪费我一天的时间,就因为这个BUG,害我没找妹子去玩,可恶可恶!!!STM32的GPIO引脚有这一些约定俗......
  • 11月8日记录
    在MySQL中,创建一个用于存储文本的列通常使用TEXT或VARCHAR数据类型。使用TEXT类型TEXT类型适合存储较长的文本(最大长度为65,535字节)。CREATETABLEmy_table(idINTAUTO_INCREMENTPRIMARYKEY,descriptionTEXT);使用VARCHAR类型如果知道文本的最大长度,......
  • 劫持微信聊天记录并分析还原 —— 数据库结构讲解(四)
    本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以Python语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。下面我们将深入探讨这个工具的各个方面及其......
  • 劫持微信聊天记录并分析还原 —— 合并解密后的数据库(三)
    本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以Python语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。下面我们将深入探讨这个工具的各个方面及......
  • 居然都到 7.x版本了!!!雷池 WAF 社区版 7.x 的体验记录
    雷池WAF简介雷池WAF,英文名“SafeLine”,由长亭科技出品的一款Web应用防火墙,可以保护Web服务不受黑客攻击,早年就以”智能语义分析技术“闻名于安全行业。雷池社区版是长亭基于原有技术打造的一款开源WAF,主打简单易用,我猜的不错的话长亭应该是想借这种产品形态来占领中......
  • Azure VM (44) Azure 虚拟机反向DNS记录
    《WindowsAzurePlatform系列文章目录》 AzureVM设置反向DNS记录1.首先,先创建1台AzureVM,部署在AzureGermanyWestCentral。给这台虚拟机挂载1个公网IP地址2.在自己的DNS域名解析商,做CNAME解析,比如:lei.cyyyt.net做CNAME解析到azure的公网IP域名:leire......