lzoi模拟赛题解

Posted rilisoft

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lzoi模拟赛题解相关的知识,希望对你有一定的参考价值。

A题:签到题
原题:mtoi 联赛 的A题
定位:真.签到题(普及B题或者提高d1A题)
考点:选手的基本数学能力
思维难度:提高-
代码难度:普及A题

题解:80%:暴力枚举
100%:注意到(a xor b)<=(a+b),于是把所有的数异或起来即可。

B题:送分题
原题:[多省省队联测]d2A:皮配
定位:一道联赛d1B题,考察了选手的基本功。送了选手70分。把70%的2种做法扩展可以得到正解
考点:多种背包dp,计数
思维难度:提高
代码难度:提高+

前面的几个数据可以暴力枚举解决。
50%的数据:考虑dp。设定f[i][x][y]表示前i个学校,选择蓝阵营的有x个,选择鸭派系的有y个。随便转移。可以使用滚动数组优化空间。
另外20%的数据:注意到k=0,那么发现“选择阵营”和“选择派系”这2个操作是互不影响的。那么就可以直接做了。
考虑将所有学校按照城市的编号从小到大排序。
设f[i][j]表示dp了i个城市,选择蓝阵营的人数有j个。
g[i][j]表示dp了i个学校,选择鸭派系的人数有j个。
可以按照普通的背包转移。然后使用乘法原理随便计算答案。
100%的数据:注意到所有数据中k<=30,所以有不喜欢导师的学校的数量不多。可以单独提取dp。
但是上面f,g的定义要修改成:f[j]表示dp了i个城市(没有有偏好的学校)(i滚动掉了),选择鸭派系的人数有j个。
g[j]表示dp了i个学校(没有偏好)(i滚动掉了),选择鸭派系的人数有j个。随便转移即可。
考虑设f1[i][j]表示当前城市(要有至少一个有偏好的学校)都在蓝阵营,并且有j个人在鸭派系(有a[i]-j个人在z派系)的方案数。设f2[i][j]表示当前城市(要有至少一个有偏好的学校)都在红阵营。并且有j个人在鸭派系(有a[i]-j个人在z派系)的方案数。
考虑每次dp后把f2的贡献合并到f1上。
每次,首先把f1复制一份到f2上。
然后枚举每一个学校,根据其偏好进行转移。
在更新完f1,f2以后,可以枚举这个城市选择的是蓝阵营还是红阵营。使用f1[x-a[i]][y]+f2[x][y]更新f1[x][y]
(前面这段的意义是:所有都选择蓝阵营,后面的意义是:所有都选择红阵营)。
最后枚举x,y,用f1[x][y]和f,g更新答案。
坑:要跳过没有学校的城市,否则只有20分。

C题:水题
原题:loj noip模拟赛d1C题:旅游路线
定位:一道联赛d1C题,考察了选手的思维能力。考察了多种算法。
考点:二分,类矩阵乘法,倍增,dp
思维难度:提高+
代码难度:提高-
前面的数据:瞎dp,瞎枚举,出(搬)题人没有考虑这种做法(其实是太弱写不出来)。可以拿到一些部分分。
满分算法:设f[i][j]表示现在在景点i,且一定要在景点i加油,剩余j元钱,可以走的最大路程。
如果j<p[i],那么f[i][j]=0。
否则枚举下次加油的位置j。得到如下转移方程:
f[i][j]=maxf[k][j-p[i]]+w[i][j][min(c[i],C)]
解释一下:k为下次要加油的城市,w[i][j][k]表示从i至j经过不超过k条道路的最大路程。
w[][][]可以暴力dp计算。可以枚举某个出发能到i的一个城市l
那么w[l][j][k-1]可以转移至w[i][j][k]。
但是暴力dp太慢。考虑倍增。
改变一下状态的定义:
w[i][j][k]表示i->j经过不超过2^k条路径的最大路程。可以枚举中转点l转移。方程:
w[i][j][k]=minw[i][l][k-1]+w[l][k][k-1]
注意到这个运算其实是矩阵乘法把*换成+,把+换成取min,其实是满足结合律的。
所以可以预处理出w[i][j][k](即log个矩阵)。
当询问w[i][j][min(c[i],C)]时,可以使用一个1*n的矩阵乘以这些矩阵来得出答案。这个1*n的矩阵在[1][i]位的值是0,其他都是无穷大。将min(c[i],C)二进制拆分,然后对于每一位乘上对应的矩阵即可。
注意到f[i][]满足单调性,任取2个整数j,k(j<k),则f[i][j]<=f[i][k]。(其实就是“从i出发带的钱更多,就可以走的更远”)。所以可以在f[i][]里面二分第一个大于d的位置p,使用q减去p即可得到答案。
于是对于每一个询问如上处理即可。

总结:这是一次难度略小于去年d2,大于去年d1的模拟赛。注重考查选手的基本功。
对于一般的选手,A题只要经过一定的思考,在10min内就可以想出来
B题只要会普及组背包dp,就可以获得50分的好成绩。然后只要注意到k=0时,派系的选择和阵营的选择互相独立就可以获得70分。
C题随便暴力乱搞可以获得0~60不等的好成绩。
所以我预计1=线在130~160之间。少有选手超过240分,ak的更少。
A题出了一些锅,写题时漏了一个条件,以后要细心。
早上起晚了,没能及时回答同学的疑问。并且数据也出了点小锅,在此致歉。

以上是关于lzoi模拟赛题解的主要内容,如果未能解决你的问题,请参考以下文章

10月15日模拟赛题解

蓝桥杯python第三期模拟赛 python题解

蓝桥杯python第三期模拟赛 python题解

第十三届蓝桥杯模拟赛(第一期)题解-代码详解(C语言)

第十三届蓝桥杯模拟赛第二期JAVA组个人题解

10-4国庆节第七场模拟赛题解