980041382 发表于 2022-3-27 22:22

求助一道算法题 40CB

题目大意是:
初始给一根长度为n的棍子,每秒所有棍子长度+1,然后会选最长的长度的是偶数的一根棍子折成两半,求k秒后最长的棍子长度。0秒的时候会先折一次。

测试用例1:
输入:
1 1
输出:
1

测试用例2:
输入:
4 0
输出:
2

测试用例3:
输入:
1 6
输出:
4

小懒虫丶 发表于 2022-3-27 22:32

毫不夸张的说,没读懂题.............{:301_1007:}

Vardven 发表于 2022-3-27 22:35

这个是应该用方程式吗,我好像会,但是懒得算怎么办!

980041382 发表于 2022-3-27 22:43

小懒虫丶 发表于 2022-3-27 22:32
毫不夸张的说,没读懂题.............

就是有一根魔法棒 每秒钟都会增加一个单位长度 然后魔法棒还可以被分成两半 这两半也有上面的两个性质

980041382 发表于 2022-3-27 22:44

Vardven 发表于 2022-3-27 22:35
这个是应该用方程式吗,我好像会,但是懒得算怎么办!

不是啊 是一道算法题

3630 发表于 2022-3-27 23:33

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)))

3630 发表于 2022-3-28 00:28

#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);
}

980041382 发表于 2022-3-28 00:32

3630 发表于 2022-3-28 00:28
#include
using namespace std;
typedef long long ll;


老哥能说一下解题思路吗 。。。然后我另外一个帖子的40CB给您

侃遍天下无二人 发表于 2022-3-28 08:35

一根棍子折完之后就变成两根了吗,模拟算法还是很简单的,但我想不到数学算法应该是啥样的

980041382 发表于 2022-3-28 09:39

侃遍天下无二人 发表于 2022-3-28 08:35
一根棍子折完之后就变成两根了吗,模拟算法还是很简单的,但我想不到数学算法应该是啥样的

我只能想到用暴力
页: [1] 2
查看完整版本: 求助一道算法题 40CB