首页 > 其他分享 >2023.4 做题笔记

2023.4 做题笔记

时间:2023-05-01 12:22:18浏览次数:42  
标签:log 线段 mid 笔记 亵渎 复杂度 2023.4 sum

出于一些原因,只有 4.21 往后的题。

LOJ6481 Visual Python++

考虑贪心。非常容易想到,从左往右扫,每次扫到一个右下角时就匹配一个在它上面但是高度差最小的左上角,如果有多个同一高度的可以不用考虑顺序,因为边界重合的情况是不合法的。

对于一种匹配方案,怎么判断它合不合法呢?我们同样考虑从左往右扫,在左边界加入线段,右边界删除。扫到一条矩形的边界 \((y_1,y_2)\) 的时候,查询当前的线段中是否存在线段 \([l,r]\),满足 \(y_1\le l\le y_2\) 或 \(y_1\le r\le y_2\),用一个 set 可以轻松维护。

但是这样没法判断所有的不合法情况。我们只需要将 \(x,y\) 坐标交换然后再进行一次相同的过程即可。

正确性可以通过手搓所有不合法情况来验证。

时间复杂度 \(O(n\log n)\)。

LOJ2470 有向图

一眼丁真保序回归。直接莽一个保序回归板子,可以在 \(m=n-1\) 的情况下达到 \(O(n\sqrt n \log n)\) 的优秀复杂度,可以获得 \(50\) 分。

我们考虑如何快速地解决最小权闭合子图问题。对于树的情况:我们有 DP 状态 \(f_{u,0/1}\) 表示 \(u\) 选了 \(mid/mid+1\) 时的子树内最小代价。求方案时做一遍 DFS 并贪心按照 DP 值选取即可。时间复杂度 \(O(n\log n)\)。

对于基环树的情况,我们钦定一个环上的点为根,记录 DP 状态 \(f_{u,0/1,0/1}\) 表示 \(u\) 选了 \(mid/mid+1\),根选了 \(mid/mid+1\) 时的最小代价。对于非树边 \((root,u)\),我们在计算到 \(f_{u,*,*}\) 时将不合法的状态赋值为 \(+\infin\) 即可。

时间复杂度 \(O(n\log n)\)。

LOJ6723 教科书般的亵渎

注意到加入随从只会是亵渎的效果越来越好,而 \(n\) 种亵渎的总触发次数是 \(O(n\ln n)\) 级别的,所以我们只需要维护每次添加随从后每个亵渎触发次数有没有增加即可。

对于参数为 \(d\) 的亵渎,发动次数是集合 \(\{\lfloor\frac{h_i}{d}\rfloor\}\) 的 \(\text{mex}-1\),其中 \(h_i\) 是随从的血量。我们设当前参数为 \(d\) 的亵渎发动次数为 \(x_d\),则添加一个血量在 \((dx_d,dx_d+d]\) 中的随从时,该亵渎就可以多发动一次。所以我们只要维护这些区间即可,这是简单的。

时间复杂度 \(O(n\log^2 n)\)。

LOJ3280 首都城市

首先考虑我们一定要选颜色 \(1\) 时怎么做。显然我们此时一定要选择颜色 \(1\) 虚树中所有的点,然后我们会得到一些新的颜色,然后我们又可以找到一些新的必须要选的点。具体的实现中我们可以随便选择一个颜色 \(1\) 的点为根,然后进行 BFS 过程:选颜色 \(x\) 的点之后要把其他所有颜色 \(x\) 全选完且选点 \(u\) 一定要选它的父亲。

直接暴力是 \(O(n^2)\) 的,然后我们把它修改成点分治就可以得到一个简单的 \(O(n\log n)\) 做法了。有点小细节。

LOJ6411 三角形

由于 \(r,c\) 同阶,复杂度叙述中用 \(n\) 代替 \(r,c\)。

容易想到一个 \(O(n^3)\) 的做法:预处理每个点往左上/右上/左下/右下走最多能走多少条边,枚举等边三角形横着的那条边计算答案。

考虑如何优化枚举方式,这里以正着的三角形为例,倒着的是对称的。设点 \((i,j)\) 往左上/右上分别能走 \(f(i,j),g(i,j)\) 条边,则对于左下角 \((i,j)\),合法的右下角需 \((i,x)\) 要满足:

  1. \(x-j\leq g(i,j)\)
  2. \((i,j)\) 向右能走到 \((i,x)\)
  3. \(f(i,x)\geq x-j\)

对于前两个限制,实际上是确定了右下角的 \(y\) 坐标在一个区间内;第三个限制,对应着我们需要查询区间中 \(f(i,j)-j\) 大于某个值 \(x\) 的个数,容易做到 \(O(n^2\log^2 n)\)。

Baekjoon18070 Double Palindrome

先考虑把同一个串的多个拆分方式看作不同方案的情况,则答案为 \(\sum\limits_{i=1}^{n}k^{\lceil\frac{i}{2}\rceil+\lceil\frac{n-i}{2}\rceil}\)。

下面考虑分析一下有多种拆分方式的串有什么良好的性质。

我们发现:一个合法串一定可以表示为一个仅有一种拆分方式的模式串重复一遍或多遍得到的串,且表示方法唯一。这里的拆分方式包含整个串本身就是一个回文串的情况。

然后就很好搞了!显然有 \(f(x)=F(x)-\sum\limits_{d|x,d<x}f(d)\frac{n}{d}\),其中 \(F(n)=\sum\limits_{i=1}^{n}k^{\lceil\frac{i}{2}\rceil+\lceil\frac{n-i}{2}\rceil}\)。

时间复杂度 \(O(n\log n)\)。

AGC038E Gachapon

容易想到 \(\min-\max\) 容斥:计算对于每个 \(\{1,2,\cdots,n\}\) 的子集 \(S\),\(S\) 中第一次存在达到限定次数的数的期望轮数。

令 \(P(S)=\sum\limits_{x\in S}A_x\)。对于一个固定的 \(S\),容易计算它的答案为 \((-1)^{|S|}\frac{P(\{1,2,\cdots,n\})}{P(S)}\sum\limits_{\{a_i\},0\leq a_i<B_i}(\sum a_i)!\prod\limits_{x\in S}(\frac{A_x}{P(S)})^{a_x}\frac{1}{a_x!}\)。

这个式子显然可以使用动态规划解决,状态中需要记录当前考虑到前 \(i\) 个数,\(P(S)=j\),所有 \(a_x\) 的和为 \(k\) 的贡献总和。转移时暴力枚举 \(a_i\) 即可。

时间复杂度 \(O((\sum A_i)(\sum B_i)^2)\)。

SPOJ GCD Extreme

普及组题目。随便 \(O(n\ln n)\) 预处理一下就行。

Gym101404B Free Goodies

注意到第一个人一定是按照一个固定的顺序选最靠前的一个,这个条件可以转化为按照该顺序排好后,对于任意一个前缀 Jan 选择的个数都小于等于 Petra 选择的个数(如果 Jan 是先手就 \(+1\))。

然后就可以 DP 了,\(f(i,j)\) 表示考虑前 \(i\) 个,Jan 选了 \(j\) 个的最大总和。

时间复杂度 \(O(n^2)\)。

Gym101464C Largest Empty Circle on a Segment

显然这题满足单调性,所以考虑二分。

二分出半径 \(r\) 了之后,我们可以对于每条线段处理出会使圆和该线段相交的 \(x\) 区间。具体地,我们把这条线段看成一个香肠形,或者说一个长方形和两个圆叠一起,然后分别和圆心所在的线段求交即可。

时间复杂度 \(O(n\log n)\)。

AGC008E Next or Nextnext

考虑边 \(i\rightarrow a_i\) 组成的有向图,它一定是一个基环树森林。

我们注意到,若一个基环树满足存在一个点,有至少两个非环上的点连向它,答案就为 \(0\)。

两个长度为 \(n\) 的环还可以合并,合并的方案有 \(n\) 种。一个基环树上的方案是容易计算的。然后随便乘法原理计数一下即可。

注意一个细节:长度为大于 \(1\) 的奇数的一个单环有两种方案:一步一跳和两步一跳。

时间复杂度 \(O(n)\)。

标签:log,线段,mid,笔记,亵渎,复杂度,2023.4,sum
From: https://www.cnblogs.com/Kevin090228/p/17366322.html

相关文章

  • 「学习笔记」SPFA 算法的优化
    与其说是SPFA算法的优化,倒不如说是Bellman-Ford算法的优化。栈优化将原本的bfs改为dfs,在寻找负环时可能有着更高效的效率,但是最坏复杂度为指数级别。voiddfs_spfa(intu){ if(fg)return; vis[u]=true; for(pilit:son[u]){ intv=it.first; llw=......
  • 2023.4.30——软件工程日报
    所花时间(包括上课):0h代码量(行):0行博客量(篇):1篇今天,数学建模比赛中。。。我了解到的知识点:数学建模的相关知识......
  • day61(2023.4.30)
    1.循环语句之for 2.for循环语句实操 3.循环语句之while 4.break语句和continue语句 5.字符串 ......
  • pwn刷题笔记(格式化字符串)
    攻防世界:CGfsbchecksec查看保护机制,开启了NX和Canary,32位ELF。反汇编代码如下:intmain(){charbuf[0x7E-0x76];ebp-7Eshortintanonymous_0;ebp-76chars[0x74-0x10];ebp-74intanonymous_1;ebp-10anonymous_1=gs:14h//g......
  • 四月读书笔记3
    四月读书笔记3流程图是被吹捧得最过分的一种程序文档。事实上,很多程序甚至不需要流程图,很少有程序需要一页纸以上的流程图。”“现实中,流程图被鼓吹的程度远大于它们的实际作用。没有一个有经验的编程人员,在开始编写程序之前,会例行公事地绘制详尽的流程图。在一些要求流程图的组......
  • 构建之法阅读笔记3
    服务化架构:随着系统复杂度的提高,单体应用已经无法满足业务需求,因此需要将系统拆分成多个小的、自治的服务,以提高系统的可扩展性和灵活性。去中心化思想:在设计系统时,应该避免单点故障,采用去中心化的思想,将负载分散到多个服务器上。同时,要考虑数据的一致性和复制策略。弹性设计:系统......
  • 人月神话阅读笔记3
    第十三章涉及软件开发中普遍性的问题。尽管每个软件项目都有其独特之处,但是软件开发中也存在许多普遍性的问题,如进度管理和技术选型等。作者提出了一些建议,如制定标准的进度计划和技术选型标准等,用以避免类似的问题在未来出现,并使软件开发工作变得更加高效、可靠和可预测。第十四......
  • 「学习笔记」Floyd 的应用
    求最短路for(intk=1;k<=n;++k){ for(inti=1;i<=n;++i){ for(intj=1;j<=n;++j){ f[i][j]=min(f[i][j],f[i][k]+f[k][j]); } }}求最小环过程记原图中\(u,v\)之间边的边权为\(val\left(u,v\right)\)。我们注意到Floyd算法......
  • OpenResty学习笔记02:为服务增加waf功能
    一.WAF简介 Web应用防护系统(也称为:网站应用级入侵防御系统。英文:WebApplicationFirewall,简称:WAF)。目前国内的几大云服务商都提供了企业级的WAF产品,且均价格不菲。好消息是,在OpenResty生态中,有一款开源的WAF可供我等学习,开源万岁! 二.开源的WAF 该WAF的作者叫赵......
  • 树上启发式合并学习笔记
    最近几天了解到一个很神奇的算法——dsuontree,看上去没多快实际上很快,这叫低调。好久不更了,至于反演,5月再更吧,4月的最后一天分享一下dsuontree。顺便闲话一句,4/26是我生日,也是历史二模。重链剖分dsuontree这类dsuontree适用于多次询问,每次询问需要$O(子树大小)......