1. 题目来源
链接:3773. 兔子跳
2. 题目解析
脑筋急转弯的失败…想着每次用最不超过 x 位置的数跳过去,殊不知直接超过 x 也是可以的。例如,3 4 5, x=12,直接 5 5 5 就行了,而不是 5 5 到 10,再来两次…,伞兵了。
思路:
- 1 步跳到,元素相同即可。
- 不能一步跳到,则只用关心最大值。
- 当最大值>x,则 2 步直接到,等腰三角形即可。
- 当最大值<x,则最后两步构成等腰三角形,等价于上取整。
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n, x;
int main() {
int T; cin >> T; while (T -- ) {
cin >> n >> x;
bool flag = false;
int mx = -1e9;
for (int i = 0; i < n; i ++ ) {
int t;
cin >> t;
if (t == x) flag = true;
mx = max(mx, t);
}
int res = 0;
if (flag) res = 1;
else if (x < mx) res = 2;
else res = (x + mx - 1) / mx;
cout << res << endl;
}
return 0;
}
本文介绍了如何解决一道关于兔子跳的编程挑战,关键在于理解可以直接跳过限制值x。通过分析最大值与x的关系,确定一步跳、两步跳或者等腰三角形跳法。代码实现采用O(n)的时间复杂度和O(1)的空间复杂度,实现了高效求解。
318

被折叠的 条评论
为什么被折叠?



