2019牛客暑期多校训练营(第十场)

2019牛客暑期多校训练营(第十场)

A Blackjack

题意:给定n个物品,每个物品有一个 v a l u e value value,每次不放回抽取一个物品,如果抽取的value总和小于 a a a,继续游戏,如果 a &lt; s u m ≤ b a &lt; sum \leq b a<sumb,则Calabash 赢,如果 s u m &gt; b sum &gt; b sum>b,则Calabash 输,求Calabash 赢的概率
分析:这是背包问题的一个变型,如果使用 i n t 128 int128 int128计算所有的方案数,大概能过 80 80% 80的样例,所以需要边计算方案数边计算概率, 先进行所有物品的 d p dp dp d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示如果从前i个物品中选取j个物品,价值为 k k k的概率是多少
d p [ i ] [ j ] [ k ] = d p [ i − 1 ] [ j ] [ k ] + d p [ i − 1 ] [ j − 1 ] [ k − x [ i ] ] ∗ j / ( n − j + 1 ) dp[i][j][k] = dp[i-1][j][k]+dp[i-1][j-1][k-x[i]]*j/(n-j+1) dp[i][j][k]=dp[i1][j][k]+dp[i1][j1][kx[i]]j/(nj+1)
代表第i个物品,可以选,也可以不选,如果选了,可能再 1.. j 1..j 1..j次取的过程中被取,总的概率需要除以 n − j + 1 n-j+1 nj+1,可以采用滚动数组
最后需要做一次背包回退,求出不选第 i i i个物品,选取 j j j个物品,价值为 k k k的概率是多少,然后计算是否能通过这一次取第 i i i个物品达成条件,并计算概率。
参考代码code

B Coffee Chicken

签到题

C

题意:给定一个空字符串,每次可以在给定字符串前面或者后面加一个字符,对于每次修改,查询有多少个循环节,最后一个循环节不完全的也可以。
分析:对于给定字符串,判断是否存在长度为 x x x的循环节,只需要判断hash值, s [ l , r − x ] s[l,r-x] s[l,rx] s [ l + x , r ] s[l+x,r] s[l+x,r]是否相等即可,我们知道循环节存在也满足单调性,二分即可

参考代码code

D

扩展中国剩余定理,用python

E Hilbert Sort

递归

F Popping Balloons

做法较多,我才用线段数维护

G Road Construction

题意: 找到一条直线将平面内的点分成两半,并且离最近点的距离最远
分析
直线一定与两个点的连线平行或者垂直,枚举直线的斜率,然后求每个点到直线的距离,找到中间的两个点即可
参考代码code

H Stammering Chemists

模拟

J Wood Processing

题意: 给定n个木块,将木块分成k个部分,把每个部分都砍成一样高,求最少需要砍的面积是多少
分析: 按照高度排序,然后斜率优化进行dp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值