8道备赛试题

来源:互联网 发布:淘宝上什么叫匿名购买 编辑:程序博客网 时间:2024/06/08 06:09

2096. 【普及模拟套题1】Chocolate 

·分析一下题意,因为要求分给k个人,那么只能分k-1次,注意,每次分只能分一块蛋糕,不能同时分。

·所以我们只需递归一下并记录一下值即可

·记录的值就是对应的蛋糕是否之前已经算过可分·因为记录的值分true和false,所以我们可以用函数更加简单

难度:**


2097. 【普及模拟套题1】Distinct 

明显的二分答案。

·贪心思路:尽量将所有士兵往左移

·注意贪心的时候对于一个坐标i,二分的答案m,则这个位置上的士兵能移到的最左位置为i-m,最右位置i+m,根据“左移”的思想,我们还需判断当前能移到的位置一定不能与上次的最右位置重叠,所以上次的最右位置需要另开变量记录

难度:**


2100.【普及模拟套题2】八数码 

·bfs

·哈希

难度:*


2101.【普及模拟套题2】多段线性函数 

·分析题意,给你m个区间,并给出m个区间的取值Li,Ri.

·现在,让你求一个区间L,R,满足函数f(l)=f(l+1)=...=f(r),并且F[L..R]是所有函数值的最小值.

·若

·把所有l,r合并一起,排序后取中位数即可

·三分,两次三分分别求出边界即可

·很明显根据题意可以得知f(x)的值程下降-平行-上升型,那么对于这么一个不严格的单峰函数,二分显然错误,那么考虑三分

·具体如何三分?

·假设对区间[L..R]进行三分,设x为第一个三等分点,y为第二个三等分点,显然,我们如果当前要求峰值中最左那一个,那么三分思想就是让[L..R]的值尽量小,根据此思路,如当f(y)>=f(x)的时候,则将r变为y,否则将l变成x

·求峰值中最右的那一个亦然

难度:***(第一次接触三分)


2106. 【普及模拟套题3】门票 

·题目大意,给你一些元音字母,辅音字母,要求你组一个长度为l的串,使得这个串中至少有1个元音字母与2个辅音字母

·因为题目中有一重要条件,最多只需前输出25000个串,则此题难度大大减低,不加任何优化纯粹暴力也可过

·但这道题如若不是这么要求的话,想想剪纸,应该也是比较容易的

难度:*


2107. 【普及模拟套题3】交流 
·题目大意,给你m个串,然后让你求出在其中符合k个串相同的字符串的个数
·特别注意,符合且仅符合k个串
·暴力,我们要求只符合k个串的,这很容易实现,递归就行了,但是如何去重呢?
·很明显,我们可以先把符合k个字符串的字符串拿出来,如果此字符串又在剩下字符串里多符合了1个字符串,那么就得把符合这k+1个字符串的个数都减掉,固然,当你把所有k+1的都减去后,你会发现k+1k+1互相的交集减多了,所以把符合k+2个字符串的个数加上,以此类推
·这样暴力可以拿80分,但如果想要水过的话,还需加一个sb剪枝,如果当前选的串已经不能对答案有贡献则直接退出
·这题还可以用dp解决,暂时不会


2108. 【普及模拟套题4】买装备  
·题目大意不说了,很明显的二维dp
·设
fi,j表示有i的物抗,j的魔抗所花费的最小金币数
·方程显然
·注意如果每一维上的值大于最高能选的值得花就直接设为最高能选的值


2109. 【普及模拟套题4】清兵线 
·题目大意,一个数轴上,从原点开始,往一些站有士兵的地方出发,每个士兵的血量为
m,那么走到一个士兵所站的位置,把它杀了后能获得的金币是m-disdis表示当前走过的距离,让你统计在某一时刻的最大金币数为多少
·先纵观数据,
n<=300,m没鸟用,那么容易想到dp
·假设当前总共想杀
k个小兵
·设
fi,j表示当前杀了i~j段小兵的最大金币数
·这么设对吗?
·我们得需先明白一个性质,假设当前想杀
i~j这一段的小兵,必须是线性杀过去,但杀的方向不同结果会不一样,严谨说来就是没有后效性
·那么对于这么一个状态,我们并不知道到底是从哪边杀过去,所以转移比较难推,我们可以多加一条件
·设
f1,i,j表示当前杀i~j段小兵,最后到i的最大金币数
·设
f2,i,j表示当前杀i~j段小兵,最后到j的最大金币数
·之后,我们还要想清楚,因为每个小兵的金币数与之前走的路程有关,但我们如果直接统计走的路程的话,较为繁琐,我们可以在杀一个小兵时,直接加上它的贡献m,再减去这个点带来的所有“负作用”,也就是从上一个小兵走到这个小兵所需花费的路程时间在接下来所需杀得所有小兵身上都给减掉,那么对于下一个小兵就不需考虑以前走过路程带来的这一因素。
·转移方程就不写了,看懂上面的话,应该是不难推出

·注意,有可能小兵的血量为负数,所以不一定所有的小兵都要杀, 选取最大的f1i,j,f2i,j即可.

1 0
原创粉丝点击