如何在A96802.前向走中拿时间空间双
2026-07-07 16:17:31
发布于:北京
如何在:
A96802.前向走
中拿时间空间双修的成就
时空双修者
同时达成时间&空间双击败了99%的用户
很简单









#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<int> F(n + 1, 0);
for (int y = 2; y <= n; ++y) F[y] = 1;
int S = 1;
int D = 0;
int prev_dp = 1;
for (int x = 2; x <= n; ++x) {
int f = F[x];
D += f;
if (D >= m) D -= m;
int dp_x = S + D;
if (dp_x >= m) dp_x -= m;
int delta = dp_x - prev_dp;
if (delta < 0) delta += m;
for (int y = x + x; y <= n; y += x) {
F[y] += delta;
if (F[y] >= m) F[y] -= m;
}
S += dp_x;
if (S >= m) S -= m;
prev_dp = dp_x;
}
cout << prev_dp << '\n';
return 0;
}
无废话
当然,
我自认为c++不厉害
所以
我希望各路高人能帮我加精


















全部评论 3





































































































































































[:ACGO_肝昨天 来自 江苏
0




































































































































































66666666昨天 来自 江苏
0
昨天 来自 江苏
0





















有帮助,赞一个