HNOI2015题解
奇了怪了我上次发的题解怎么不见了?
题意自己戳链接……
Day 1
id=4008">HNOI2015 Arthur
思路:期望DP
直接DP是死也D不出的
转化一下
令f[i][j]——第i张卡在第j回合发动的概率
得到状态转移方程:
f[i][j]——f[i−1][j]∗(1−pi−1)j+f[i−1][j+1]∗(1−(1−pi−1)j+1)
这样下来,答案就为:
∑ni=1∑rj=1f[i][j]∗(1−(1−pi)j)∗di
时间复杂度:O(Tnr)
id=4009">HNOI2015 Fruit
思路:DFS序+总体二分+线段树
设pos[x]——x在DFS序中的位置
我们将水果转化为二维平面上的点(x,y),则有:
每一个盘子能够接到的水果为二维平面上的若干矩形:
对于盘子(x,y),最好还是设deep[x]< deep[y]
若x为y的祖先,则该盘子能够接到的水果满足:一个端点在y的子树内。还有一个端点在x的子树外
否则能够接到的水果满足:一个端点在x的子树内,还有一个端点在y的子树内
假设在这里套上树分治,能够将矩形规模缩小到P*logN
(Orz考场上N*log3N水过的matthew99爷)
只是我们直接使用DFS序(pos[x],pos[y])。能够将矩形规模缩小到2
于是问题变成,二维平面上若干矩形和若干询问点,对于每一个询问点求覆盖它的矩形的第k大。可离线
在线算法挺麻烦的……
总体二分就可以解决这个问题
对于区间[l,r]内的矩形。我们考虑[l,mid]对每一个询问点的覆盖次数
若覆盖次数超过相应的询问k,则说明答案在[mid+1,r]中
否则说明答案在[l,r]中
将询问点分成两份后。递归处理就可以
时间复杂度:O(Nlog2N)
HNOI2015 Dishes
思路:优先队列+字典序
首先排除无解情况
若给定优先顺序出现环状,则说明无解
否则我们考虑整个序列
在1最优先的情况下,使2最优先
将整个序列倒过来,则有:
在1最后的情况下,使2尽量靠后
显然:字典序最大
将整个图倒过来建
每次取可行的最大解增加答案
最后将答案倒序输出就可以
时间复杂度:O(NlogN)
Day 2
HNOI2015 Maple
思路:DAG上DP
设di为i点的入度
对于一个DAG,我们会发现答案为ans=Πni=2di
麻烦的就是多了一条边
这时我们会发现答案增大了
这些增大的方案为那个新边构成的环数
设新边为(x,y),我们能够DP求得增大的方案数
f[i]——y->i对答案的增大的数目
显然:f[i]=∑j−>if[j]∗d−1i
初始状态:f[y]=ans∗d−1y
答案:ans−f[x]
在模质数下可将除法转化为乘法逆元
时间复杂度:O(N+M)
id=4012">HNOI2015 Shop
思路:可持久化树分治结构
事实上没有思路上说的那么复杂……
假设是离线的话,直接一个树分治就搞定
然而题目强制在线。只是每一个点度数不超过3
假设Q=1,我们仅仅需一次树分治
若Q=100。我们能够进行100次树分治
然而Q=200000……
不怂。我们考虑每次树分治
我们会发现,每次分治选出的重心都是一样的
我们将这些重心拎出来,又一次构成一棵树
我们称之为分支结构树
显然,这棵树的深度不超过logN
对于每一个询问,我们发现。仅仅有在分治结构树中这个点和它的祖先的答案对这个询问有答案贡献
假设度数>3,我们就须要一个可持久化数据结构来维护每一个重心在分支结构树中的答案
只是这个题度数小,我们能够开3个vector,然后直接合并答案
这样我们仅仅需在分治结构树中计算这个点和它的祖先的答案就可以
时间复杂度:O(QlogN)
id=4013">HNOI2015 Pairwise
思路:树形DP
首先将相等的缩成一个点
然后考虑无解状况,相似Day1 T3
设:一个序列的长度为’<’个数+1
对整个森林进行DP
f[i][j]——以i为根的子树产生的长度为j的序列个数
状态转移方程:f[i][j]=合并f[son[i]][k]
这个合并能够利用背包解决
问题转化为,对于一个长度为x的序列和一个长度为y的序列,将其转化为长度为z的序列共同拥有多少种方案
依据基本组合知识能够知道:(xz)×(x+y−z x)
时间复杂度:O(N^4)
HNOI2015题解的更多相关文章
- # HNOI2012 ~ HNOI2018 题解
HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组 ...
- [HNOI2015]部分题解
Day1 T2 [HNOI2015]接水果 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简单了, ...
- [HNOI2015]菜肴制作 题解(自带口胡证明)
[HNOI2015]菜肴制作 时间限制: 1 Sec 内存限制: 512 MB 题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为 ...
- 【题解】[HNOI2015]菜肴制作(贪心+topo序)
[题解][HNOI2015]菜肴制作(贪心+topo序) 题意:请你构造一个排列\(p[i]\)使得对于数组\(arc[i]=p[i]\)的字典序最小,并且对于给定的有序数对\((u,v)\)保证你给 ...
- HNOI2015 Day 2题解
昨天做了HNOI day 2,感觉好像还是可做的,想当年什么splay还是高级算法,现在点剖什么就老考了简直丧病,虽然第二题还没写那就先当下嘴巴选手吧= = T1:[HNOI2015]落忆枫音 描述: ...
- 【题解】 [HNOI2015]菜肴制作 (拓扑排序)
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...
- 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】
组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n\) 个穴位,穴位的编号为 \(1\sim n\).有若干条有向的脉络连接着这些穴位. ...
- 洛谷 P3239 / loj 2112 [HNOI2015] 亚瑟王 题解【期望】【DP】
???看不懂的期望DP 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚 ...
- 【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)
原题戳我 Solution: (部分复制Navi_Aswon博客) 解释博客中的两个小地方: \[\sum_{\left(S是G中y→x的一条路径的点集\right))}\prod_{2≤j≤n,(j ...
随机推荐
- Web前端开发测试题阅读笔记
引自: http://www.w3cplus.com/css/front-end-web-development-quiz.html Q7:下面代码弹出值是什么? x = 1; function ba ...
- 重装MAC系统 “安装器有效负载签名检查失败” 解决方法
部分朋友反应安装macOS Sierra的时候会提示:"安装器有效负载签名检查失败" 其实这是系统时间不对的原因,把系统时间修改正确就好了. 1,如果电脑正常运行,那么进系统偏好设 ...
- 《FPGA全程进阶---实战演练》第四章之实验平台软硬件使用简介
本章主要是讲解读者在进行FPGA逻辑设计之前的准备工作,需要下载Quartus II软件和 Modelsim 软件,一个是用来进行FPGA逻辑设计,一个是用来对逻辑进行理论分析与验证. 1.1 qua ...
- 修改socket文件, MySQL启动报错
事情是这样的, 我要搭建MySQL主从, 做读写分离, 然后就要了一台服务器搭建mysql, 最近犯懒, 就寻思搞一个二进制的吧直接启用 一堆问题就出现了 [ERROR] Can't start se ...
- Linux操作_grep/egrep工具的使用
一.grep命令介绍 命令格式:grep [-cinvABC] ‘word’ filename,常用选项如下: -c:表示打印符合要求的行数. -i:表示忽略大小写. -n:表示输出符合要求的行及其行 ...
- Java如何使用线程异常?
在Java编程中,如何使用线程异常? 此示例显示如何在处理线程时处理异常. package com.yiibai; class MyThread extends Thread { public voi ...
- (转)LCD:LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP平台信息:内核:linux2.6/linux3.0系统:android/a ...
- Linux 内存buffer与cache区别_003
一.首先大概了解一下计算机CPU.Cache.Buffer.内存.硬盘.SWAP CPU也称为中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机 ...
- (个人)CentOS的JDK安装
一. 卸载JDK 1. 通过如下命令查看当前JDK的相关内容 rpm -qa | grep java 2. 如果出现如下内容 java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el ...
- linux命令中的head命令
head命令和tail命令就像他的名字一样浅显易懂,它是用来显示开头或者结尾某个数量的文字区块,head用来显示档案的开头至标准输出当中,而tail想当然就是查看档案的结尾. 命令格式 head [ ...