type
status
date
slug
summary
tags
category
icon
password
题目链接:
题目描述
ikrpprpp 发现了一个由整数组成的数组 。他喜欢公平,所以想让 变得公平,也就是让它不递减
为此,他可以对数组中的索引 进行公正操作,将 替换为 (位置 的元素及其平方)。例如,如果 ,ikrpprpp 选择对 执行正义行动,那么 就会变成 。
要使数组不递减,最少需要多少次正义行动?
输入格式
第一行包含一个整数 - 测试用例的数量。随后是测试用例的描述。
对于每个测试用例,第一行包含一个整数 - 数组 的大小。第二行包含 个整数 。
所有测试用例中 的总和不超过 。
输出格式
对于每个测试用例,打印一个整数--使数组 不递减所需的最小正义行为数。如果无法做到,则打印 。
样例 #1
样例输入 #1
样例输出 #1
注释
在第一个测试案例中,无需执行正义行为。阵列本身就是公平的!
在第三个测试案例中,可以证明数组不可能非递减。
在第五个测试用例中,ikrpprppp 可以在索引 上执行一次正义行动,然后在索引 上执行一次正义行动,最后在索引 上执行另一次正义行动。之后, 将变成 。
题解
观察数据范围,我们可以暴力求解次数。但是这样会面临一个问题,爆long long而导致答案错误。
我们先来观察相邻的两个数。我们假定 是两个相邻的数,如果 ,我们需要对 操作。假设 是数组的第一个元素,我们只需要找到一个 ,使得 。那么如果 并不是数组的第一个元素呢,我们假设到 时要满足条件需要 进行了 次操作,即 ,此时,由于幂函数的单调性可知 依然成立。也就是说到 时, 需要操作 次。
所以,我们只需要遍历数组,记录下前 个数时的操作次数,即可得到第 个数的操作次数,然后累加即可。
下面是 ac 代码:
- Author:Serendipity
- URL:https://serendipity565.netlify.app//article/Squaring
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!