NOIP2016提高组口胡题解

本文总结了竞赛中的算法技巧,包括模拟、线段树合并、DFS、LCA、链剖等方法,并介绍了如何解决最短路径、概率计算等问题。此外还讨论了数据结构优化和状态压缩等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来来来,让我们来口胡一波

Day1

T1

直接模拟呀!下标都-1然后用%就好了

T2

本次比赛最难的一道题。
目前据我所知有三种算法
首先,我们考虑转化题目。
把链拆成两条,一条向上,一条向下
如果一个点x,可以到达它的s在下面,那么满足dx+wx=ds
如果t在下面,那么满足dxwx=dtlent
其中len表示总长,d表示深度
发现左边都是一个定值,右边都只和s/t有关
那么我们的问题就变成了求以一个点为根的子树中有多少个权值为x的点
最暴力的想法就是直接线段树合并+动态开点
复杂度O(N log N),常数有些大CCF老爷机。。。。

然后我们发现我们只关心某个子树中一个值出现的次数。
那么我们在dfs之前记录一下这个值之前出现的次数,dfs后记录一下
两次相减就是我们要求的答案
lca用tarjan就可以做到O(N)

我用的方法比较辣鸡
我们发现如果是链上的就可以O(N)解决,头尾打上tag然后开个桶扫一遍就好了
现在上树了呢?
那就链剖喽
复杂度也是O(N log N),不过常数小一点,卡卡常就可以碾过去了

T3

首先最短路弗洛伊德(你想跑迪杰斯特拉加heap我不拦着你)
然后设Fi,j,0/1表示前i堂课,用了j次换课,且第i次换还是不换的最小期望长度
我们发现两堂课之间的期望是独立的,只和两端的状态有关,根据期望的线性我们可以直接把它加起来。
然后就随便DP一下就好了。
还是需要卡常。。。

Day2

T1

杨辉三角求组合数%k,然后二维前缀和

T2

首先可以把所有蚯蚓还原到0时刻的长度
注意先切掉的所分裂出来的蚯蚓一定比后切的分裂出来的要先切
于是开三个队列,维护原来的蚯蚓,切掉的第一/二段
复杂度O(M)

T3

首先状压,暴力枚举两个点求抛物线,暴力转移2^N*N^3
预处理选两个点能影响到的点,转移2^N*N^2
发现我们的目标是全清,而且最优策略和顺序无关,于是可以强制一定要打掉编号最小的那只猪。
O(2^N*N)
发现这道题中有用的状态不会太多。
而且状态之间的转移构成了一张DAG
那么就直接bfs一遍求最短路就好了
O(玄学)
某Howar 打这个东西民间数据5ms大跳楼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值