试了n=1e9,没超时
2024-12-13 17:03:21
发布于:黑龙江
9阅读
1回复
0点赞
试了一下n=1e9,耗时30ms,答案:1
答案和其他人一样,但是时间满足条件了,应该是没问题的
就是找规律,设solve(n)是第n个字符,
所以有solve(n - last_b.size),
last_b.size是小于c的最长b长度
找规律可得这是一个斐波那契
/*
b a len
123 4567 3
1234567 123 7
1234567123 1234567 10
12345671231234567 1234567123 17
... ... 27
*/
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
string a = "4567", b = "123";
LL f[55] = {0, 3, 7};
void init(){
for (int i = 3;i < 55;i++ ) f[i] = f[i - 1] + f[i - 2];
}
LL solve(LL n) {
return n <= 7 ? n : solve(n - f[lower_bound(f, f + 55, n) - f - 1]);
}
int main(){
LL n;
cin >> n;
init();
cout << solve(n);
return 0;
}
全部评论 1
这题数据超水 暴力都能过
2025-01-02 来自 广东
0
有帮助,赞一个