首页 > 其他分享 >8.5 模拟赛

8.5 模拟赛

时间:2024-08-05 20:27:47浏览次数:8  
标签:8.5 log 复杂度 leq 模拟 集合 mathcal dp

总结

输在语文上了。

t1 签到题。

t2 神秘 dp,问题主要在处理二次函数的限制上,考虑直接拆开或者差分后面的思路就容易了。

t3 语文题,要将集合的关系转移到图上,部分分给了非常多的正解启示。

t4 dp,卡特兰数,格路计数。


题解

road

二分答案,转化为最少添加几个传送锚点,对于每两个点对计算需要添加多少个传送锚点,然后跑最短路即可。

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

seq

对于 \(50\) 的部分分,令 \(dp_{i,j}\) 为前 \(i\) 个数,结尾为 \(j\) 的最小花费,暴力转移即可。时间复杂度为 \(\mathcal O(nA^2)\)。

对于 \(70\) 的部分分,考虑如何不用枚举前一个数的大小。因为 \(c\) 是固定的,所以 \(dp_{i-1,j}\rightarrow dp_{i,k}\) 的花费为 \(c\times|j-k|\)​。

于是记录 \(sum_{i,j}\) 表示 \(\min(dp_{i,k}+c\times(k-j))\),正着反着扫一遍预处理,就可以做到 \(\mathcal O(1)\) 转移。

需要滚动数组避免空间爆炸,时间复杂度为 \(\mathcal o(nA)\)。

对于全分,发现对于左右两边都比自己大的数,肯定会不停往上增加,直到 \(x^2>2c\)。

但在那之前,如果它与左右两边某一个数一样大了,那么两个数一定会一起向上增加或是一起停止,否则无贡献甚至负贡献。

\(x^2\) 的限制非常烦人,考虑拆开。因为 \((x+1)^2-x^2=2x+1\),所以只用维护 \(\sum x\)。

找到 \([l,r]\) 的最大值 \(a[mid]\) ,然后拆成左右两个区间,递归去做。如果左右两个区间都能升到和 \(a[mid]\) 一样的大小,那么就把这个区间看成一个整体继续向上加,否则继续向上加是没有意义的。二分计算即可。

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

set

对于 \(c_i=1\) 的部分,如果把每个集合的下标与需要交起来的的集合下标连边,发现最后会形成森林。

建立一个根节点把他们拼成一棵树。那么集合 \(B_i\) 就是节点 \(i\) 到根节点路上所有的数组成的集合。

所以每次询问只找到这些关键点所在的最小联通块,统计出所有点到根节点路径的并即可。

这个只需要将关键点按照 dfn 排序后求所有点的深度和减去相邻两个点的 LCA 深度和。

对于 \(k\leq 2\) 的部分,还是把每个集合的下标与需要交起来的的集合下标连边。

如果 \(x\in B\),那么从节点 \(i\) 出发,走到终点的所有路径都要经过点 \(x\)。根据这点我们建立支配树就好了。

结合上面两个部分分,正解其实就是在建好的支配树上用 \(c_i=1\) 的部分分做法计算就好了。

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

sort

考虑 dp 出合法的方案数。

从大到小插入元素,一个元素插入后作为不合法的末端,当且仅当前面两个比它大的元素中间夹了一个比它小的。

那么也就是插入到一个地方就保证这个位置前面已经插入的所有元素中间不能再插入元素了。

设 \(f_{i,j}\) 表示插了 \(i\) 个数,有 \(j\) 块(块之间可以插元素)的方案数。

转移枚举插在哪个空隙,发现插在最开头和前两个块中间会使块数加一,其它的会使 \(j\) 块变成 \(2\leq k\leq j\) 块。

转移就是 \(2f_{i,j}\to f_{i+1,j+1}\) 和 \(f_{i,j}\to f_{i,k}(2\leq k\leq j)\)。直接写是 \(\mathcal O(n^3)\) 的。

优化成 \(\mathcal O(n^2)\),有 \(f_{i,j} = f_{i,j+1} + 2f_{i-1,j-1} + f_{i-1,j}\)。

转化成格路计数,即为:

\[\left| L\left((0,0)\to(n,n)\mid x\geq y\right)\right|,(x,y)\to (x+1,y),(x,y+1),(x+1,y+1) \]

可分治 FFT / oeis 法做。时间复杂度为 \(\mathcal O(n\log n)\) 到 \(O(n)\) 不等。

标签:8.5,log,复杂度,leq,模拟,集合,mathcal,dp
From: https://www.cnblogs.com/QcpyWcpyQ/p/18343999

相关文章

  • 8.2 模拟赛
    总结今天的暴力打的还行T1的卷积优化dp是真不会。T2正解如果花时间是好想的,赛时在做t3。t3会了性质,但是不会维护。t4乱搞。题解monster暴力dp显然,考虑优化。设\(f_{i,j}\)表示选了\(i\)个非负整数,和为\(j\)的最大的\(\sums\),直接做背包是\(\mathcalO......
  • 8.5日每日总结之双板升级下载
    之前搞BOOTLOAD双区升级时忘记记录了,现在补充上。keil软件使用时,配置h文件路径,./表示进入文件夹;最好是把所有文件放到一个新的文件夹里,以防复制工程时会打开上一次的文件,新复制文件最好重新编译一下。双板升级时,一款板子做主板,内存大的优先,另一块做副板,由主板和WIFI通信控制两块......
  • 8月5日CSP-S模拟赛赛后总结
    8月5日CSP-S模拟赛赛后总结\[8月5日\\CSP-S模拟赛\\赛后总结\\2024年8月5日\\by\\\uhw177po\]一、做题情况第一题比赛\(100pts\),赛后\(AC\)第二题比赛\(20pts\),赛后\(AC\)第三题比赛\(0(40)pts\),赛后\(AC\)第四题比赛\(0(50)pts\),赛后\(A......
  • 【笔记】非传统题选讲 2024.8.5
    今天睡着了。发了只是为了完整性。[CF1672E]notepad.exe先二分得到总长度\(\suml_i+n-1\)记为\(w_1\),然后考虑其它行数\(h\),最优的情况只能是每一行都用换行顶替一个空格,此时面积为\(w_h\cdoth=w_1-h+1\),所以\(w_h=\left\lfloorw_1/h\right\rfloor\)为唯一可能更新答......
  • 8.5今日复习
    1:在堆区申请10个连续空间,手动输入10个数(递增),输入关键字key,采用折半查找方式查找关键字是否存在,存在给出位置,不存在,输出查找失败。注意:main函数在main.c输入函数,输出函数,查找函数,在find.c main函数代码:#include<myhead.h>#include"find.h"#defineMAX10intmain(int......
  • 学习笔记 韩顺平 零基础30天学会Java(2024.8.5)
    P460八大Wrapper类     黄色的父类是number,黑色的是自己独立的P461装箱和拆箱     手动装箱示例:                             intn1=100;                Intergerinterger=newInterger(n1);//......
  • 2024.8.5 test
    A你可以花费\(x^2\)的代价使\(A_i\)加上\(x\),\(x\ge0\),最后再加上代价为\(c\sum|A_i-A_{i-1}|\),问最小代价。\(n\le10^5\)。我们可以把序列分成若干“山峰”以及“山谷”,山峰是不会加的。考虑从山谷开始做,即每次取出最小值。设一开始处理\(A_i\),发现\(A_i\)最多是......
  • 8.5模考总结
    省流:坠机了,但没完全坠。\(T1\)水,直接枚举比较即可,赛事\(15min\)\(AC\),实际\(5min\),\(10min\)再打缺省源,最终得分\(100pts\)。\(T2\)模拟每一个括号,维护一个深度,当深度大于\(L\)或小于\(0\)时,累计答案即可,赛事\(50min\)\(AC\),最终得分\(100pts\)。\(T3\)一个......
  • 云原生周刊:Knative 1.15 版本发布|2024.8.5
    开源项目推荐helm-secretshelm-secrets是一个Helm插件,用于动态解密加密的Helm值文件。TofuControllerTofuController(以前称为WeaveTF-Controller)是Flux的一个控制器,用于以GitOps方式协调OpenTofu和Terraform资源。TracetestTracetest是一个使用OpenTelem......
  • 模拟登录以在登录墙后进行数据抓取的最简单方法
    我正在尝试从雅虎财经抓取数据。我需要的数据只能通过我购买的高级订阅来访问。但是,每当我运行脚本来抓取网页时,它都是在我的登录之外完成的。因此我的脚本返回-{"finance":{"result":nullerror:{"code":"unauthorized"description:"用户未登录"}}}我想模拟我的登录通过......