鱼C论坛

 找回密码
 立即注册
查看: 1031|回复: 10

[已解决]梦想星际舰队第11关 && FCOI #7 第四题经验题解【原创】

[复制链接]
发表于 2023-8-20 19:03:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangjinxuan 于 2023-8-20 20:21 编辑


梦想星际舰队第11关 && FCOI #7 题解


第四题:经验

题目描述

Ewan-Ahiouy 在玩 《MineCraft》

一开始,他的等级为 0,现在他准备了 n 个附魔之瓶,打算提升自己的等级。

已知从 i 级升到 i+1 级(i∈N*) 需要 i+1 个附魔之瓶,请问他最多会升到多少级?

本题目使用多测,一共有 T 个测试用例。

输入格式
第一行一个整数 T,接下来 T 行,表示每一个测试用例对应的整数 n。

输出格式
一个整数表示答案。

输入输出样例
输入 #1
6
2
3
6
9
19900
114514
输出 #1
1
2
3
3
199
478

数据范围

1≤n≤10^18
1≤T≤2×10^5

其他说明
本题目为 zhangjinxuan 原创题目。
测试链接:https://www.luogu.com.cn/problem/U321240

答案与解析
游客,如果您要查看本帖隐藏内容请回复
[/hide]

最佳战士排行榜
游客,如果您要查看本帖隐藏内容请回复
[/hide]
最佳答案
2023-8-20 20:14:39
import math
T = int(input())
for i in range(T):
    n = int(input())
    a = 1
    b = 1
    c = -2 * n
    x = int((-b + math.sqrt(b**2 - 4*a*c)) / (2*a))
    print(x)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-20 19:04:18 | 显示全部楼层
根据题目描述,我们需要计算给定的附魔之瓶数量n可以提升到的最高等级。

观察题目中升级等级和所需附魔之瓶数量的规律:
· 升级到1级需要1个附魔之瓶;
· 升级到2级需要2个附魔之瓶;
· 升级到3级需要3个附魔之瓶;
· ...
· 升级到i级需要i个附魔之瓶。

可以观察到,当附魔之瓶数量n满足 1+2+3+...+k <= n 时,最高可以升级到k级。而当 1+2+3+...+k > n 时,最高只能升级到k-1级。

通过求解等差数列的和,可以使用以下公式计算等级k:
k = int(sqrt(2 * n + 0.25) - 0.5)

使用Python代码实现如下:
import math

def calcMaxLevel(n):
    k = int(math.sqrt(2 * n + 0.25) - 0.5)
    return k

T = int(input())
for _ in range(T):
    n = int(input())
    result = calcMaxLevel(n)
    print(result)

希望对您有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-20 19:04:30 | 显示全部楼层
根据题目描述,Ewan-Ahiouy想要通过使用附魔之瓶来提升他的等级。已知从第i级升到第i+1级需要i+1个附魔之瓶。题目要求我们计算他最多能升到多少级。

我们可以观察到,当Ewan-Ahiouy拥有的附魔之瓶数量为n时,他最多可以升到的级数是连续的。也就是说,他能升到的最高级数是满足以下条件的最大的i:1+2+3+...+i <= n。

为了计算这个最大的i,我们可以使用二分查找的方法。首先,我们设置一个左边界l=0和一个右边界r=n。然后,我们在[l, r]的范围内进行二分查找,直到找到最大的i满足1+2+3+...+i <= n。

具体的二分查找过程如下:
1. 初始化l=0和r=n。
2. 当l <= r时,执行以下步骤:
   · 计算中间值mid = (l + r) // 2。
   · 计算1+2+3+...+mid的和sum = (mid * (mid + 1)) // 2。
   · 如果sum <= n,说明mid满足条件,更新l = mid + 1。
   · 否则,更新r = mid - 1。
3. 返回r作为最大的满足条件的i。

下面是实现这个算法的Python代码:
def max_level(n):
    l, r = 0, n
    while l <= r:
        mid = (l + r) // 2
        sum = (mid * (mid + 1)) // 2
        if sum <= n:
            l = mid + 1
        else:
            r = mid - 1
    return r

T = int(input())
for _ in range(T):
    n = int(input())
    print(max_level(n))

这个代码首先读取输入的测试用例数量T,然后依次读取每个测试用例的附魔之瓶数量n,并调用max_level函数计算最大的满足条件的等级,并将结果打印出来。

希望这个解答对你有帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-20 19:11:31 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-20 19:26:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-20 19:28:50 | 显示全部楼层
天才!我还不会一元二次方程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-20 19:29:38 | 显示全部楼层
isdkz 发表于 2023-8-20 19:04
根据题目描述,Ewan-Ahiouy想要通过使用附魔之瓶来提升他的等级。已知从第i级升到第i+1级需要i+1个附魔之瓶 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-20 19:33:28 | 显示全部楼层
Ewan-Ahiouy 发表于 2023-8-20 19:28
天才!我还不会一元二次方程

这个,几个公式就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-20 19:44:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-20 19:47:10 | 显示全部楼层
陈尚涵 发表于 2023-8-20 19:33
这个,几个公式就行了

问号脸.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-20 20:14:39 | 显示全部楼层    本楼为最佳答案   
import math
T = int(input())
for i in range(T):
    n = int(input())
    a = 1
    b = 1
    c = -2 * n
    x = int((-b + math.sqrt(b**2 - 4*a*c)) / (2*a))
    print(x)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 08:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表