Involuting Bunny! (2021.9)
文化课就很掉头发,文科都能学好我还怕竞赛?(
大概从“刷的题的题解”推广为“所有做的题的题解”吧,兔子比较懒,这样写题解轻松一些。
Tags:「A.扫描线」「B.离线」
发现网格图本身很小,扫描线求出每个点最先被谁覆盖,最后被谁覆盖,然后离线算答案即可。我写的这个屑非常卡常。
Tag:「B.贪心」
水题,随便贪心即可。注意用 std::nth_element 将复杂度实现为 \(\mathcal O(n)\)。(其实我 std::sort 就过了。
Tag「A.数学-组合计数」
显然 \(k\) 次冒泡能使序列升序的充要条件是每个位置初始向前的逆序对数不超过 \(k\),方案数即 \(k!(k+1)^{n-k}\);而 LIS 为 \(n-1\) 的序列等价于在忽略一个数之后有序,那么忽略的数 \(x\) 可以分为两种情况:
\(x\) 向前的逆序对数大于 \(k+1\);
有若干个小于 \(x\) 的数在 \(x\) 后,且它们向前的逆序对数恰为 \(k+1\)。
分别统计贡献,可得 \(\mathcal O(Tn)\) 的算法;可以分块进一步优化复杂度。
Tags:「A.DP-状压/插头 DP」「B.差分」「B.模型转化」
差分,那么一次以 \(x\) 为左端点,长度为 \(l\) 的修改相当于翻转 \(x\) 和 \(x+l\),建图,BFS 求出同时翻转一对最终为 \(1\) 的状态的最少操作数,状压 DP 求答案。
Tags:「A.分治-二分答案」「B.贪心」
二分在操作序列开头添加多少个 E 0,判断合法时,我们仅需讨论 E 0 和 L 0 的实际含义,对于 E 0:
若存在不在基地且下一个操作为离开的人,令满足要求且离开操作编号最小的人进入;
否则,令一个新人进入。
对于 L 0:
若存在在基地且下一个操作为进入的人,令满足要求且进入操作编号最小的人离开;
否则若存在在基地中且没有后续操作的人,令他离开;
否则若存在在基地中且下一个操作为离开的人,令满足要求且离开操作编号最大的人离开;
否则,忽略操作(假定基地初始有个人,让他离开)。
【A - 茅山道术】
同色段忽略为单个颜色,那么仅用考虑 \(i\) 位置的颜色是否和前一个同色位置进行操作,得到转移。
【B - 泰拳警告】
枚举打平的场数,组合数、二项式定理算贡献。
【C - 万猪拱塔】
Tags:「A.数据结构-线段树」「B.Tricks」
不要沉迷于喵树分治,会变得喵喵喵。(
第一步转化,维护值域,求 \([l,r]\) 内的数是否恰为一个矩形。令值在该区间内的格子为黑色,其余为白色,接下来是一个结论,或说神奇的 trick:
黑色格子构成矩形,等价于恰有 \(4\) 个 \(2\times2\) 的方格包含了奇数个黑格子。
那么,扫描 \(r\),维护 \(v_l\) 表示 \([l,r]\) 为黑色时包含奇数个黑格子的方格数量,由于这一数量的下界是 \(4\),所以仅需维护最小值,顺带维护最小值个数、取最小值的下标和来计算答案。每加入一个点,重新计算这个点周围四个方格即可。极度卡常,建议使用 ZKW 线段树(可惜我不会。
顺带一提,这题放序列上可以直接单调栈 + 线段树;而序列上亦能用这种维护“两个格子不同色”的数量来算答案,且这种算法貌似能扩展到更高维空间?
【D - 抑郁刀法】
Tags:「A.搜索-穷举搜索」「B.优化建图」「C."NPC"」
按度数缩图——度数为 \(1\) 的点,方案贡献恒为 \(k-1\);度数为 \(2\) 的点,例如 \(u\),它有邻接边 \((u,v)\) 和 \((u,w)\),那么 \((v,w)\) 边在 \(v,w\) 颜色相同和不同时有两种贡献,不过这也能够通过 \((u,v)\) 和 \((u,w)\) 的贡献数算出来。最后得到任意点的度数 \(\ge 3\) 的图,最多剩下 \(10\) 个点 \(15\) 条边,暴搜这些点的最小表示法,算上邻接边的贡献即可。
【Summary】
C 的喵树分治明明伪得不行却浪费大量时间写;
留给 D 的时间非常不充裕。
虽然没挂,但为了 rush 暴力几乎没有检查。
算法,特别是自认为是正解但是很难写的算法,必须想清楚,像这次堆出 8K 的屎山真的极度浪费时间。
后两题不要先入为主断定难易度,起码的思考以及完赛检查时间预留充分。
Tag:「C.构造」
题意相当于构造 \(\{1,2,\dots,2n\}\) 的完美匹配,使得每对数的差恰构成集合 \(\{1,2,\dots,n\}\)。利用一段区间左右不停向内连进行大多数操作,剩下的细节手玩叭√
Tags:「A.Kruskal 重构树」「A.数据结构-可持久化线段树」「B.DFN」
Tags 已经说明了一切.jpg。
Tags:「A.数据结构-可持久化线段树」「B.差分」
把修改和查询都差分为四个顶点的二维前缀修改,考虑修改点对询问点的贡献,主席树维护 \(x\) 轴前缀上,\(y\) 轴区间的四种贡献信息即可。我的代码貌似讨论得有些复杂,可以看看 mmm 的。(
Tag:「A.数据结构-可持久化线段树」
前 \(k\) 大老套 trick,主席树维护每个左端点的方案集合即可,不赘述。
Tag:「A.数据结构-可持久化线段树」
有点把前一道搬到树上的感觉 awa。用主席树维护关于深度的答案;std::map 启发式合并维护子树内最浅颜色保证不重复贡献。
UOJ77 & Submission.
Tags:「A.数据结构-可持久化线段树」「A.网络流-最大流/最小割」「B.优化建图」
长得一副最小割的样子那就直接来嘛——连 \(\lang S,i,b_i\rang\) 以及 \(\lang i,T,w_i\rang\) 表示颜色选择,对于 \(i\),连向一个用于支付“奇怪”代价的点 \(p\),容量 \(p_i\),主席树优化 \(p\) 连向其他点的过程,最后跑一个最小割就好。
Tag:「A.数据结构-可持久化 Trie」
次大值的性质并不优美——直接枚举它,通过单调栈二分求出使得它成为次大值的两个区间,再用可持久化 Trie 维护区间异或 \(x\) 的最大值计算答案。
Tag:「A.数据结构-可持久化 Trie」
直接上可持久化 Trie 就行,由于 01-Trie 可以视为值域线段树,所以它也能处理第 \(k\) 大等操作。
CF916D & Submission.
Tags:「A.数据结构-可持久化 Trie」「A.数据结构-可持久化线段树」
难点大概是题意理解叭。它其实是会 undo 掉 undo 操作的,如果直接从可持久化版本的角度理解反而清晰一些。
我们需要支持持久化维护字符串与权值的对应,以及权值自身的信息。同步处理一棵可持久化 Trie 和可持久化权值线段树即可。
Tags:「A.分块」「A.数据结构-可持久化 Trie」
分块还是得练呐。第一步显然求前缀异或和将问题转化为区间两数异或最大值。预处理一棵可持久化 Trie 维护区间异或 \(x\) 的最大值,然后分块。对于第 \(i\) 块,设其为 \(l_i\),预处理出 \(f(i,r)~(r\in[l_i,n])\) 表示区间 \([l_i,r]\) 的答案。单次询问时,暴力处理左端点 \(l\) 所在块的贡献,查 \(f\) 的表知后半段的贡献。设块长为 \(b\),复杂度为 \(\mathcal O(\frac{n^2}{b}\log A+mb\log A)\),显然 \(b=\sqrt{\frac{n^2}{m}}\) 时取下界 \(\mathcal O(n\sqrt{m}\log A)\)。
注意 \(\textit{lastans}+x\) 可能爆 int 哟
(其实这中途咕咕咕了很多题 qwq。)
Tag:「A.DP-状压/插头 DP」
令 \(f(S)\) 表示 \(\forall x,y\in S,x\not=y,~x\rightarrow y\) 的概率,\(g(S,T)=\prod_{x\in S}\prod_{y\in T}\frac{a_x}{a_x+a_y}\)。那么答案即为
\]
先 \(\mathcal O(3^n)\) 求出 \(g\),再同样 \(\mathcal O(3^n)\) 求出 \(f\) 即可。
Tag:「C.性质/结论」
经典结论:合法涂色方案中,必然所有行或者所有列都是黑白交替。
分别维护行能否黑白交替,列能否黑白交替,行列能否同时黑白交替,以及有多少不被限制的行和列,就能计算答案。
Tag:「C.性质/结论」
结论什么的很好推嘛,比较琐碎就不提了。注意实现的时候可以从每个字符的角度进行检查,记录字符前驱后继来遍历,写着会舒服亿点。(不是你这题解越来越抽象了啊。
Tag:「C.性质/结论」
令 \(f(i)\) 表示以 \(i\) 结尾的最大得分。\(|c_i-c_j|\) 有严格顺序关系,按此顺序枚举 \((i,j)\) 进行转移。
Involuting Bunny! (2021.9)的更多相关文章
- Involuting Bunny! (2021.8)
CF1555F & Submission. Tags:「A.生成树」「B.Tricks」 分类处理询问的 trick:连接两个连通块的边显然合法,先用这些边构建生成森林.发现每条边 ...
- codevs 2021 中庸之道
2021 中庸之道 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给定一个长度为N的序列,有Q次询问,每次 ...
- Python 小游戏 Bunny
最近在学习Python,所以上网找了一个小程序练练手. 关于这款名为[Bunny]的小游戏,详细请看下面的链接: http://www.oschina.net/translate/beginning- ...
- Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论
1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 130 Solved: 88[Submi ...
- poj 2021 Relative Relatives(暴力)
题目链接:http://poj.org/problem?id=2021 思路分析:由于数据较小,采用O(N^2)的暴力算法,算出所有后代的年龄,再排序输出. 代码分析: #include <io ...
- 使用Bash Bunny从被锁定的系统抓取登陆凭据
在今年早些时候,FB就对Bash Bunny做了相关的报导.这款号称“世界上最先进的USB攻击工具”的Bash Bunny,是否真的像其所说的一样是款渗透神器呢?下面,我将通过实例演示如何利用Bash ...
- iPhone屏蔽IOS更新、iPhone系统更新的提示(免越狱,有效期更新至2021年)
iPhone屏蔽IOS更新.iPhone系统更新的提示(免越狱,有效期更新至2021年) 1.在Safari浏览器中粘贴如下链接,按提示打开链接. 输入http://apt.dataage.pub 2 ...
- HDU 2021 发工资咯:)
http://acm.hdu.edu.cn/showproblem.php?pid=2021 Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的 ...
- Math.abs(~2020) 按位取反后的绝对值是多少 2021, 按位取反后,比正数多1
Math.abs(~2020) 按位取反后的绝对值是多少 2021, 按位取反后,比正数多1 int 值的取值 范围: -128 --- 127 之间, 0000 0000 按位取 ...
随机推荐
- Java读写XML代码示例
采用技术:dom4j 需要jar包:dom4j-1.6.1.jar 主类如下---- public class dom4jTestXML { /** * * 方法描述:读取XML文件示例 备 注 ...
- vps上安装CobaltStrike服务端
今天我在我的vps上安装CobaltStrike服务端,真的是踩坑无数,所以写这篇博客记录一下,防止后人再踩坑 安装Oracle JDK8 官方不建议使用OpenJdk,建议使用Oracle JDK的 ...
- k8s中的nginx-ingress如何配置路径重定向
k8s中的nginx-ingress如何配置路径重定向 一. 需求描述 路径重定向的一般应用场景: 调整用户浏览的URL,看起来更规范 为了让搜索引擎收录网站内容,让用户体验更好 网站更换新域名后 根 ...
- Android官方文档翻译 三 1.1Creating an Android Project
Creating an Android Project 创建一个Android项目 An Android project contains all the files that comprise th ...
- 《剑指offer》面试题64. 求1+2+…+n
问题描述 求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6 示 ...
- 将Cesium Tools用于更好的构建管理
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium技术正在给建筑业带来革命性的变化.我们与 partn ...
- python技巧一行命令搞定局域网共享
python超强玩法--一行命令搞定局域网共享 今天刷到python的一个新玩法,利用python自带的http服务,快速创建局域网共享服务,命令如下: python -m thhp.server ...
- golang中channel
1. Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication). 2. select package main im ...
- ES6新增的数组的方法
forEach forEach()会遍历数组, 循环体内没有返回值,forEach()循环不会改变原来数组的内容, forEach()有三个参数, 第一个参数是当前元素, 第二个参数是当前元素的索引, ...
- numpy常用函数记录
np.square() 函数返回一个新数组,该数组的元素值为源数组元素的平方. 源阵列保持不变. 示例: import numpy as np a = np.array([[1, 2, 3], [4, ...