HNOI2019 题解
题目排序不是我做题的顺序也不是试题顺序。
多边形
首先要知道终止态是所有边都指向了 \(n\) 号节点。
那么我们如果每一步都让 \(n\) 的度数 +1 那一定是最优的,显然可以办到。
那么可以从与 \(n\) 相邻的边分割出若干个独立的部分求解。
对于一个部分,每次我们一定是选一个最高的边进行 \(\text{rotate}\),然后分成两个独立的部分。
对于一个 \(\text{rotate}(a,c)\),二分找到 \(\lt c\) 的最大的与 \(a\) 有边的就是 \(b\)。
注意到这个形成一个二叉树结构。
根据森林的拓扑序计数 \(res={n!\over \prod size_i}\) 答案只跟树上节点的 \(size_i\) 有关,可以直接计算。
考虑 \(\text{rotate}\) 一次的影响,根据下图:
只有 \(x\) 这个点的 \(size\) 变化,更新一下即可。
时间复杂度 \(O(n\log n)\) 或者 \(O(n)\)。
白兔之舞
首先知道两个数组循环卷积相当于 DFT 以后点值相乘再 IDFT 回去。
\[
c_i=\sum_{j=0}^{n-1}\sum_{k=0}^{n-1} a_jb_k[j+k=i\mod n]\\
={1\over n}\sum_{j=0}^{n-1}\sum_{k=0}^{n-1} a_jb_k\sum_{d=0}^{n-1}w^{d(j+k-i)}\\
={1\over n}\sum_{d=0}^{n-1}w^{-di}A(w^d)B(w^d)
\]
考虑算一个数组的 DFT
\[
f_i=A(w^i)=\sum_{j=0}^{n-1}a_jw^{ij}\\
=\sum_{j=0}^{n-1}a_jw^{{i+j\choose 2}-{i\choose 2}-{j\choose 2}}
\]
mtt 即可。
考虑算一个数组的 IDFT,reverse 处理即可。
鱼
鱼身和鱼尾是两个独立的部分,分开做并且预处理出来。
考虑对于 \(AD\) 统计 \(BC\), 可以先枚举所有 \(BC\) 把它挂在 \(BC\) 的垂直平分线上,然后在线段 \(AD\) 处在直线 \(AD\) 所对应的 \(\text{vector}\) 里面二分这个区间。
垂直平分线的条件是充要的,为了方便用斜截式 \(y=kx+b\) 来表示直线,二元组 \((k,b)\) 均为化简的分数(此题严重卡精度、卡 int64 溢出)。
对于 \(y_p \neq y_q\) 的点对,垂直平分线斜率存在,把中点横坐标插入 vector 中;
对于 \(y_p = y_q\) 的点对,垂直平分线斜率不存在,用唯一确定的横坐标 \(x_p+x_q\over 2\) 表示这一类直线,把中点纵坐标插入 vector 中。
考虑对于 \(AD\) 统计 \(EF\),考虑先枚举 \(D\) 再枚举 \(A\) 的话,然后所有点关于 \(D\) 点极角排序,\(\angle ADQ \in (0.5\pi, 1.5\pi)\) 的 \(Q\) 可以作为 \(E/F\) 点。
双指针扫描,类似莫队一样维护以 \(dist(D,Q)\) 为下标的 map 即可算出点对个数。
话说这个要取中点于是一开始坐标统一 \(\times 2\),然后极限的 \(dist=(4\times 10^9)^2+(4\times 10^9)^2\) 爆了 unsigned long long。。。
枚举 \(A\)、\(D\) 把 \(BC\) 方案跟 \(EF\) 方案乘起来即可,因为有序的,最后还要乘 \(4\)。
时间复杂度 \(O(n^2\log n)\)。
序列
直接二次函数可以证明一个连续段如果用同一个 \(b_k\) 那一定是取平均数。
\(50pts\) 做法看了就会了而且是我校 tgz 模拟赛。
考虑单调栈弹栈的过程,对于一个前缀,已经插进去的左端点过会还可能没了,但已经没了的左端点再也不会出现。
后缀也是同理,考虑一个 \(i\) 维护 \(i-1\) 的前缀单调栈和 \(i+1\) 的后缀单调栈,最终答案一定是取若干个完整的前缀栈栈顶 + \(i\) + 若干个完整的后缀栈栈顶拼接成中间一个连续段,然后两个栈内剩下来的不动,作为最终的答案序列。
定义 \(push\) 操作为把 \(i\) 或者 \([l,r]\) 插入到前缀栈中,然后调整到这个栈单调的操作。
一个暴力做法是我们 \(push(i)\),然后判断左边栈顶是不是 \(\le\) 右边栈顶,否则我们尝试把右栈栈顶整个区间 \(push\) 了,弹掉,当第一次满足条件的时候停止,大致如下图。这个做法是对的,因为这个是单调的,往右做一次的话左栈顶应该减小了而右栈顶变大了。
直接按上面那么做,复杂度 \(O(n^2)\),实际得 \(100\) 分。
因为有单调性我们可以二分这个右端点(只能是栈中元素的右端点),把这段区间一起 \(push\) 了,找最靠左的 \(mid\) 即可。
复杂度 \(O(n\log^2n)\) 实际得 \(100\) 分。
还有那个后缀栈的问题,我们可以先从 \(n\) 往 \(1\) 做出来这个栈,然后再逐位撤销操作。(询问离线下来)
可持久化线段树也可以。
校园旅行
首先 \(30pts\) 的暴力 bfs 必须会,就是往队列里面插入单个点以及相邻的同色点,每次向两头扩展相同的颜色,更新答案。
时间复杂度 \(O(m^2)\)。
\(\sum_{u,v} \text{degree}_u\times \text{degree}_v = O(m^2)\)
考虑缩图,定义0->0为黑边,1->1为白边,0->1/1->0为桥边。
那么一条回文路径可以表示为
黑边<-桥边<-白边<- ... o ... ->白边->桥边->黑边
现在约定:走黑白边必须一次性走 1e9 / 1e9 + 1 条,桥边必须一次性走 1e9 + 1 条。
那么与原问题等价。
考虑一个黑连通块,若 u->v 只能走出一种奇偶性,那么仅保留一条路径也无妨。
否则我们还要保证 u->v 能走出两种奇偶性。
对于第一种情况,缩出一棵树即可;第二种我们造一个自环。
考虑桥边,环是没有意义的,黑色 \(P\) 点可以到达白色 \(Q\) 点则一定能走出长度为 1e9 + 1 的路径。
直接删去这样的环边即可。
JOJO
这个题太难了,写了一天,要写的内容好多,先鸽了。
HNOI2019 题解的更多相关文章
- HNOI2019 简要题解
HNOI 2019 简要题解 没想到自己竟也能有机会写下这篇题解呢. LOJ Luogu Day1T1 鱼 枚举\(AD\)两点后发现\(BC\)与\(EF\)相对独立,因此只需要计算合法的\(BC\ ...
- 【HNOI2019】部分题简要题解
题意懒得写了 LOJ Day 1 T1 鱼 个人做法比较猎奇,如果有哪位大佬会证明能分享一下的话感激不尽. 题解:枚举鱼尾和鱼身的交点D,将所有其他点按照到D的距离排序,距离相同的分一组. 感性的理解 ...
- 【题解】Luogu P5288 [HNOI2019]多边形
原题传送门 HN的题目就是毒瘤 我们有以下猜想: 1.最后所有的线都连到了n号点上 2.最小步数应该为n-3-已经连到n号点的线段数量 本来有些边\((a_i,n)\)会将整个图分割成很多个区间.对于 ...
- 【题解】Luogu P5294 [HNOI2019]序列
原题传送门 题意:给你一个长度为\(n\)的序列\(A\),每次询问修改一个元素(只对当前询问有效),然后让你找到一个不下降序列\(B\),使得这两个序列相应位置之差的平方和最小,并输出这个最小平方和 ...
- 题解 [HNOI2019]序列
题目传送门 题目大意 给出一个\(n\)个数的数列\(A_{1,2,...,n}\),求出一个单调不减的数列\(B_{1,2,...,n}\),使得\(\sum_{i=1}^{n}(A_i-B_i)^ ...
- 【BZOJ5491】[HNOI2019]多边形(模拟,组合计数)
[HNOI2019]多边形(模拟,组合计数) 题面 洛谷 题解 突然特别想骂人,本来我考场现切了的,结果WA了几个点,刚刚拿代码一看有个地方忘记取模了. 首先发现终止态一定是所有点都向\(n\)连边( ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
- [LOJ3054] 「HNOI2019」鱼
[LOJ3054] 「HNOI2019」鱼 链接 链接 题解 首先想 \(O(n^3)\) 的暴力,不难发现枚举 \(A\) 和 \(D\) 后, \((B,C)\) 和 \((E,F)\) 两组点互 ...
随机推荐
- 海康 - 终端服务器 - TS-5012-F
简介 型号描述 主要特点 典型应用 技术参数 型号 参数 TS-5012-F (1T) TS-5012-F (2T) TS-5012-F (4T) TS-5012-F (8T) 系统参数 ...
- CenterOS下 Mysql数据库中数据字符乱码
1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...
- flaskapp
前置知识 https://blog.csdn.net/u013457794/article/details/88997699?depth_1-utm_source=distribute.pc_rele ...
- ddctf,warm up,web题
1,打开链接,发现下图,hhhh好滑稽啊,鹅鹅鹅鹅ee 2,打开源码发现source.php.添加到路径,再次访问,发现如下代码,来,让我们审计一下. 3,发现有个hint.php,进去看一看,得到一 ...
- 二分-A - Cable master
A - Cable master Inhabitants of the Wonderland have decided to hold a regional programming contest. ...
- 使用PHP链接MySQL
一.使用PHP查询MySQL数据库: 1.通过PHP来访问MySQL的步骤是: 连接到MySQL 选择操作的数据库 创建查询的字段 执行查询的语句 检索出结果并在网页上显示 断开与MySQL的连接 我 ...
- jenkins pipline 如何禁止任务并行
背景: 我测试的一个项目CI包括好几个步骤,但是有的步骤是不能并行的,否则会互相影响 处理过程: [方案一]:不推荐此方案 在每个步骤里面的shell脚本中加进程判断 示例:比如本任务有4个步骤,第2 ...
- HTML5使用JavaScript控制<audio>音频的播放
1.播放音乐最简单的样例 <audio controls> <source src="horse.mp3" type="audio/mpeg" ...
- Mybatis- 基础知识
mybatis是一个java持久层框架,java中操作关系型 数据库用的是jdbc,mybatis是对jdbc的一个封装. 简介 iBATIS一词来源于"internet" ...
- Spring MVC3 + Ehcache 缓存实现
转自:http://www.coin163.com/it/490594393324999265/spring-ehcache Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了 ...