题目描述
分为几种情况:
1.若 x = ai (i 为 1 ~ n),则只需跳 1 次即可
2.若 x < maxa(a1 ~ an 中的最大值),则只需斜着跳 2 次即可(等腰三角形)
3.若 x > maxa,则
(1)若 x / a 没有余数,则只需跳 x / a 次
(2)若 x / a 有余数,则只需跳 x / a + 1 次
即先沿 x 轴跳 (x / a - 1)次,每次跳 maxa距离,最后两次斜着跳 maxa 距离(等腰三角形)
时间复杂度
O(n)
C++ 代码
#include <iostream>
using namespace std;
const int N = 100010;
int a[N], n, t, x;
int main()
{
cin >> t;
while (t --)
{
cin >> n >> x;
int maxa = 0;
bool flag = false;
for (int i = 0; i < n; i ++ )
{
cin >> a[i];
maxa = max(a[i], maxa);
if (a[i] == x) flag = true;
}
if (flag) cout << 1 << endl;
else
{
if (x < maxa) cout << 2 << endl;
else cout << (x + maxa - 1) / maxa << endl;
}
}
return 0;
}
谢谢博主我傻逼了
等腰三角形不算只能凑出偶数的边长吗?为什么这里不需要考虑奇数的边呢
啥意思,边长的话奇数偶数都可以啊3,4,4和4,4,3