求助一道算法题 40CB
题目大意是:初始给一根长度为n的棍子,每秒所有棍子长度+1,然后会选最长的长度的是偶数的一根棍子折成两半,求k秒后最长的棍子长度。0秒的时候会先折一次。
测试用例1:
输入:
1 1
输出:
1
测试用例2:
输入:
4 0
输出:
2
测试用例3:
输入:
1 6
输出:
4 毫不夸张的说,没读懂题.............{:301_1007:} 这个是应该用方程式吗,我好像会,但是懒得算怎么办! 小懒虫丶 发表于 2022-3-27 22:32
毫不夸张的说,没读懂题.............
就是有一根魔法棒 每秒钟都会增加一个单位长度 然后魔法棒还可以被分成两半 这两半也有上面的两个性质 Vardven 发表于 2022-3-27 22:35
这个是应该用方程式吗,我好像会,但是懒得算怎么办!
不是啊 是一道算法题 n, k =
if n % 2 == 0:
li =
else:
li =
for i in range(k):
li =
ma = -1
for i in li:
if i % 2 == 0:
ma = max(ma, i)
if ma != -1:
li.remove(ma)
li.append(ma / 2)
li.append(ma / 2)
print(int(max(li)))
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll n, k, max, index;
vector<ll> arr;
scanf("%lld%lld", &n, &k);
if (n & 1) arr.push_back(n);
else {
arr.push_back(n / 2);
arr.push_back(n / 2);
}
for (ll i=0; i<k; ++i) {
for (ll j=0; j<arr.size(); ++j) ++arr;
max = -1; index = -1;
for (ll j=0; j<arr.size(); ++j) {
if (!(arr & 1) && (arr > max)) {
index = j;
max = arr;
}
}
if (index != -1) {
arr /= 2;
arr.push_back(arr);
}
}
max = -1;
for (ll i=0; i<arr.size(); ++i) {
if (arr > max) max = arr;
}
printf("%lld\n", max);
} 3630 发表于 2022-3-28 00:28
#include
using namespace std;
typedef long long ll;
老哥能说一下解题思路吗 。。。然后我另外一个帖子的40CB给您 一根棍子折完之后就变成两根了吗,模拟算法还是很简单的,但我想不到数学算法应该是啥样的 侃遍天下无二人 发表于 2022-3-28 08:35
一根棍子折完之后就变成两根了吗,模拟算法还是很简单的,但我想不到数学算法应该是啥样的
我只能想到用暴力
页:
[1]
2