首页 > 其他分享 >CF2023 - D. Many Games

CF2023 - D. Many Games

时间:2024-10-22 08:48:50浏览次数:1  
标签:frac cdot Many CF2023 times Games Delta 100 考虑

先让 \(p\) 除以 \(100\),相当于给你两个数组 \(p, w\),然后要选择下标集合 \(S\),使得:

\(p\) 的积乘上 \(w\) 的和最大化。

注意到 \(p_i\) 是整数,并且 \(1\le p_i \le 100\)。

那么容易想按照 \(p_i\) 分类。

然后 \(w_i\) 对于固定 \(p\) 一定是选择排序后的最大值后缀。

目前 \((P,Q)\),考虑选择 \(i\):

\[P\cdot W \to P\cdot p_i\times(W+w_i) \]

一定是后面的式子大于前面的式子才会选择,考虑做比例,那么不等式就是:

\[p_i+\frac{p_i\cdot w_i}{W} > 1\\ p_i\cdot w_i>(1-p_i)\cdot W \]

把 \(p\) 再乘回去:

\[p_i\cdot w_i>(100-p_i)\cdot W \]

题意有:\(p_i\cdot w_i \le 2\cdot 10^5\)。

所以 \(W\) 最后不会很大,只会在 \(2\cdot 10^5\) 以内。

然后我们考虑按 \(p_i\) 分类。

假设选择了某个 \(p_i\) \(c\) 个,然后考虑选入的最小的值是 \(w_i\),考虑它不能删除时:

令:\(q_i=p_i/100\):

\[P\cdot q_i^c\times(W+w_i\cdot c+\Delta) > P\cdot q_i^{c-1}\times(W+w_i\cdot(c - 1) + \Delta)\\ q_i\cdot(W+w_i\cdot c+\Delta) > W+w_i\cdot(c - 1) + \Delta\\ (q_i-1)\cdot w_i\cdot c > (W + \Delta)(1-q_i) -w_i \]

然后只需要考虑 \(\Delta=0\) 的情况,限制更加严格:

\[(q_i-1)\cdot w_i\cdot c > W(1-q_i) -w_i\\ c < -\frac{W}{w_i}+\frac{1}{1-q_i}<\frac{100}{100-p_i} \]

也就是说对于一种概率 \(p_i\) 的物品,最多选择 \(\frac{100}{100-p_i}\) 个

\[\sum_{i=0}^{99}\frac{100}{100-p_i} = 100\ln 100\approx482 \]

然后对于概率等于 \(100\) 的物品无脑全部选入即可。

这里直接用 \(dp_{i,j}\) 表示考虑完前 \(i\) 物品,目前 \(W=j\) 时的最大的 \(P\)。

最终复杂度就是 \(O(2\cdot 10^5\times 482)\)。

代码

标签:frac,cdot,Many,CF2023,times,Games,Delta,100,考虑
From: https://www.cnblogs.com/weirdoX/p/18491764

相关文章

  • Educational Codeforces Round 170 (Rated for Div. 2) C. New Games
    题意转化找一些相邻的数(其中相邻定义为递增序下任意相邻两数差\(\leq1\))求相邻数中,不同数字有\(k\)种,取到数字个数的最大值算法容易想到按顺序排列观察到有点像滑动窗口,考虑用队列维护一个出现不同数字次数为\(k\)的区间,再计算代码来自转载地址voidsolv......
  • GAMES101(作业7)
     作业七题目:实现pathTracing,仅修改castRay(constRayray,intdepth)函数,在其中实现PathTracing算法代码框架://OBJ-loader模型加载库 global:全局变量/函数 vector:Vector3f,Vector2f类floatnorm(){returnstd::sqrt(x*x+y*y+z*z);}/*向量长度......
  • Too many / Not enough values in OpenAI Gym Mario Model for Reinforcement Learnin
    题意:在OpenAI Gym的马里奥兄弟(Mario)模型中,对于强化学习来说,存在“值太多”或“值不够”的问题问题背景:ReinforcementlearningusingOpenAIGymhastheabilitytomakeareinforcementmodelforplayingSuperMarioBros.ItrieddoingthisfollowingNicholasRe......
  • Codeforces Round 959 (Div. 1 + Div. 2) C. Hungry Games题解
    CodeforcesRound959(Div.1+Div.2)C.HungryGames题解题目链接大致题意:给定一个长度为n的数组,并且给出一对l,r表示一个区间,如果∑i......
  • ARC073F Many Moves
    当你填表法推了半年没推出来,为什么不试试刷表法呢?洛谷传送门在一行中有$n$个格子,从左往右编号为\(1\)到\(n\)。有\(2\)颗棋子,一开始分别位于位置\(A\)和\(B\)。按顺序给出\(Q\)个要求,每个要求是如下形式:给出一个位置\(x_i\),要求将两个棋子中任意一个移动到位置\(x......
  • Laravel Blade:如何在表循环中迭代模型的belongsToMany关系?
    一、引言(一)介绍是一种流行的PHP模板引擎,用于构建动态网页。在本文中,我们将探讨如何在表循环中迭代模型的belongsToMany关系。通过使用LaravelBlade,我们可以轻松地处理这种复杂的关系,并在模板中显示相关的数据。本文将介绍如何设置关系、如何在模板中访问关系数据以及如何使用......
  • 游戏创作的梦想之地!EE GAMES 创作者社区上线,VipSkill产学研结合迈开重大步伐
    EEGAMES官网EEGAMES创作者社区是一个怎样的平台?EEGAMES创作者社区,是专注于链接每一位游戏创作者,提供全方位服务的游戏领域垂类社区。这里不仅仅是一个游戏创作的互助平台,更是每一位游戏创作者的梦想启航之地!无论你是经验丰富的游戏研发行家,还是刚刚起步的业内新人,都可......
  • BUG: pymysql executemany不支持insert on duplicate key update
    pymysql的executemany()方法支持传入单个SQL和一个sequenceofrecords(sequenceormapping)来同时写入多条数据。例如:sql="insertintot(c1,c2)values(%s,%s)"args=[(1,2),(3,4)]cursor.executemany(sql,args)#Ifargsisalistortuple,%scanbeusedas......
  • [ARC073F] Many Moves 题解
    [ARC073F]ManyMoves题解个人感觉其实还挺套路的题目。不配紫题。对于两个玩意在数轴上跑来跑去这种题目,常见的套路是固定一个点的位置,用另一个点的位置设为状态。对于本题,题目已经帮你固定了一个点,于是我们设\(dp_{x}\)表示一个点在当前要求的位置,另一个点在\(x\)的最小......
  • http: Accept error: accept unix /var/run/docker.sock: accept4: too many open fil
    排查思路这个错误信息表明Docker守护进程在尝试监听Unix套接字/var/run/docker.sock时遇到了问题,具体是因为系统打开的文件数量超过了限制。在Linux系统中,每个进程都有一个可以打开的文件描述符的限制,这个限制可以通过/proc/sys/fs/file-max查看,并且每个用户也有......