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)\) 两组点互 ...
随机推荐
- linux - 异常:安装包冲突 conflicts with
问题描述 解决方案 删除冲突的包 命令格式:yum -y remove 包名 yum -y remove httpd24u yum -y remove httpd24u-tools
- OpenCV3+VS2015 经常出现debug error abort()has been called问题
方案1:图片路径错误:查看imread的路径
- PHP 中 16 个魔术方法详解
PHP 中 16 个魔术方法详解 前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...
- 3 种比较 cmp
结构体中的比较 struct dian{ int l,r; bool operator <(const dian &t)const { if(r==t.r) return l>t. ...
- Window逆向基础之逆向工程介绍
逆向工程 以设计方法学为指导,以现代设计理论.方法.技术为基础,运用各种专业人员的工程设计经验.知识和创新思维,对已有产品进行解剖.深化和再创造. 逆向工程不仅仅在计算机行业.各行各业都存在逆向工程. ...
- python3练习100题——006
继续做题-经过py3测试 原题链接:http://www.runoob.com/python/python-exercise-example6.html 题目:斐波那契数列. 我的代码: def fi ...
- LitElement(一)概述
1.一些感悟 自从踏入编程领域开始,从html,css,JavaScript,jQuery,bootstrap开始接触前端,经常用NodeJS,ejs等模板语言来写个简单的页面,感觉蛮简单的,也不怎么 ...
- MySQL认知
MySQL 认识MySQL MySQL是什么? MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management S ...
- Spring MVC 中使用properties文件
首先要搭建Spring mvc的环境,然后开始properties文件里的配置: 第一步:在springcontext中注入properties,具体路径自己调整 <bean id=" ...
- HIT大作业——hello的一生
hello的一生 关键词:计算机系统:功能:流程:P2P;O2O;hello 目 录 第1章 概述- 4 - 1.1 Hello简介 - ...