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

8.2 模拟赛

时间:2024-08-05 20:27:27浏览次数:7  
标签:8.2 log sum 模拟 mathcal 复杂度 dp 暴力

总结

今天的暴力打的还行

T1 的卷积优化 dp 是真不会。

T2 正解如果花时间是好想的,赛时在做 t3。

t3 会了性质,但是不会维护。

t4 乱搞。


题解

monster

暴力 dp 显然,考虑优化。

设 \(f_{i,j}\) 表示选了 \(i\) 个非负整数,和为 \(j\) 的最大的 \(\sum s\),直接做背包是 \(\mathcal O(nm^2)\) 的。

此时 dp 状态和 \(a\) 无关。发现我们只需求最终的 \(f_{n,*}\),那么在 \(f_{i,*}\) 的基础上有

  • \(\mathcal O(m^2)\) 暴力加入一个元素,即 \(f_{i+1,j}=\max(f_{i,k}+s_{j-k})\),转移到 \(f_{i+1,*}\),暴力 dp 做了 \(n\)​ 次这个操作。
  • \(\mathcal O(m^2)\) 用 \(f_{i,*}\) 和自身做一个 \((\min,+)\) 卷积,即 \(f_{2i,j}=\max(f_{i,k},s_{j-k})\),转移到 \(f_{2i,*}\)。

path

对于 DAG 的部分分,如果 \(s\) 能到 \(t\),则每一步都贪心选能到 \(t\) 的字典序最小的点。

发现可以直接推广到不是 DAG 的情况,如果这样走出了环,就说明存在长度无限大的理想路径。

即可以在一个每个点都能到达 \(t\)​ 的环中一直走,且过程中走任意合法出边都会使得字典序变大。

那么对于每个 \(t\) 建立反图,预处理每个点走一条出边后能到达的后继。对于一组询问,处理使得不存在理想路径的情况。

倍增回答询问,时间复杂度为 \(\mathcal O(n(n+m)+(n^2+q)\log n)\)。

apple

回答单次询问。手玩发现判定规律:

先将区间全部 \(-1\),若修改完后可以多次将序列的相邻两项 \(-1\) 后使得序列全为 \(0\) 则合法。

区间询问只需要分奇偶讨论,对区间内的 \(b_i\) 加或减 \(b_{l-1}\) 即可。由贪心得,若 \(b_i<0\) 或 \(b_r\neq0\) 则无解,否则有解。

用线段树分别维护偶数位置和奇数位置的最小值即可。 时间复杂度为 \(\mathcal O(q\log n)\)。

sale

0/1 分数规划,令 \(p_{i,j}=d_id_j\),二分答案 \(x\),即判定是否存在一个 \(p\),满足

\[\sum_{i=1}^n\sum_{j=1}^n\left([i\neq j]a_ia_j\right)p_{i,j}-\sum_{i=1}^n(a_i^2x)p_{i,i}>0 \]

最大化左边的式子即可完成 check,使用网络流,关于 \(p\) 跑最大权闭合子图即可。时间复杂度为 \(\mathcal O(n^4|\log\epsilon|)\),\(\epsilon\) 是二分的精度。

标签:8.2,log,sum,模拟,mathcal,复杂度,dp,暴力
From: https://www.cnblogs.com/QcpyWcpyQ/p/18343998

相关文章

  • 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......
  • 模拟登录以在登录墙后进行数据抓取的最简单方法
    我正在尝试从雅虎财经抓取数据。我需要的数据只能通过我购买的高级订阅来访问。但是,每当我运行脚本来抓取网页时,它都是在我的登录之外完成的。因此我的脚本返回-{"finance":{"result":nullerror:{"code":"unauthorized"description:"用户未登录"}}}我想模拟我的登录通过......
  • 模拟实现 strcat(字符串追加) --浅谈C语言
    strcat描述char*strcat(char*dest,constchar*src)把src所指向的字符串追加到dest所指向的字符串的结尾。声明下面是strcat()函数的声明。char*strcat(char*dest,constchar*src)参数dest--指向目标数组,该数组包含了一个C字符串,且足够容纳追加后的字符......
  • 模拟实现 memset --浅谈C语言
    memset()描述C库函数void*memset(void*str,intc,size_tn)用于将一段内存区域设置为指定的值。memset()函数将指定的值c复制到str所指向的内存区域的前n个字节中,这可以用于将内存块清零或设置为特定值。在一些情况下,需要快速初始化大块内存为零或者特定值,memse......
  • 模拟实现 strcmp(字符串比较) --浅谈C语言
    C库函数-strcmp()描述C库函数intstrcmp(constchar*str1,constchar*str2)把str1所指向的字符串和str2所指向的字符串进行比较。声明下面是strcmp()函数的声明。intstrcmp(constchar*str1,constchar*str2)参数str1--要进行比较的第一个字符串。......
  • C++简单模拟:电梯问题
    问题描述:某城市最高建筑物只有一个电梯,一个请求列表是由 n 个正整数组成的。数字表示电梯将停在哪个楼层。电梯向上移动一层需要 6 秒,向下移动一层需要 4 秒。电梯每次停下会停留 5 秒,对于给定的请求列表,需要计算用于满足列表中所有请求的总时间。电梯开始时在第一层......
  • 模拟实现 memmove --浅谈C语言
    内存移动-memmove也是拷贝函数,源字符串可能会被覆盖,但保证目标是想要的描述C库函数void*memmove(void*str1,constvoid*str2,size_tn)从str2复制n个字符到str1,但是在重叠内存块这方面,memmove()是比memcpy()更安全的方法。如果目标区域和源区域有重叠的......
  • 学生管理系统之数据模拟与数据显示
    学生管理系统之数据模拟与数据显示设计一个单例模拟数据显示数据......
  • 模拟实现 strstr(字符串查找) --浅谈C语言
    C字符串查找-strstr()描述C库函数char*strstr(constchar*haystack,constchar*needle)在字符串haystack中查找第一次出现字符串needle的位置,不包含终止符'\0'。声明下面是strstr()函数的声明。char*strstr(constchar*haystack,constchar*needle)参......
  • 多玩模拟器vorbisfile.dll文件丢失的全面解析:原因分析及修复办法汇总
    有朋友表示不知道多玩模拟器vorbisfile.dll文件丢失是怎么回事,那么今天就为大家详细介绍一下多玩模拟器vorbisfile.dll文件丢失的原因和处理办法,千万别错过。vorbisfile.dll是一个动态链接库(DLL)文件。它通常与音频处理相关,特别是和OggVorbis音频格式的使用有关。OggVorb......