/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 3ms 1.27 MiB
#2 Accepted 23ms 1.27 MiB
#3 Accepted 50ms 1.109 MiB
#4 Accepted 241ms 1.312 MiB
#5 Accepted 465ms 1.324 MiB
#6 Accepted 457ms 1.465 MiB
#7 Accepted 455ms 1.945 MiB
#8 Accepted 134ms 2.047 MiB
#9 Accepted 64ms 2.02 MiB
#10 Accepted 34ms 2.02 MiB
#11 Accepted 21ms 1.93 MiB
#12 Accepted 448ms 2.043 MiB
#13 Accepted 578ms 2.02 MiB
#14 Accepted 455ms 2.77 MiB
#15 Accepted 456ms 1.316 MiB
#16 Accepted 540ms 1.457 MiB
#17 Accepted 688ms 1.453 MiB
#18 Accepted 459ms 1.461 MiB
#19 Accepted 451ms 1.453 MiB
#20 Accepted 454ms 1.27 MiB

Code

#include <bits/stdc++.h>

using namespace std;

void solve(int cs) {
  int n, k;
  cin >> n >> k;
  vector<int> a(n);
  for (int i = 0; i < n; i++) cin >> a[i];
  const int INF = 1e9;
  vector<int> dp(n, INF), f(2e5 + 5, INF);
  for (int i = 0; i < n; i++) {
    if (i == 0) dp[i] = 0;
    else {
      dp[i] = dp[i - 1] + k;
      for (int j = 1; j * j <= a[i]; j++) {
        if (a[i] % j == 0) {
          dp[i] = min(dp[i], f[j]);
          dp[i] = min(dp[i], f[a[i] / j]);
        }
      }
    }
    for (int j = 1; j * j <= a[i]; j++) {
      if (a[i] % j == 0) {
        f[j] = min(f[j], dp[i] + a[i] / j);
        f[a[i] / j] = min(f[a[i] / j], dp[i] + a[i] / (a[i] / j));
      }
    }
  }
  cout << dp[n - 1] << "\n";
}

int32_t main() {
  cin.tie(0) -> sync_with_stdio(0);
  int t = 1;
  cin >> t;
  for (int i = 1; i <= t; i++) {
    solve(i);
  }
  return 0;
}

Information

Submit By
Type
Submission
Problem
P1099 Which way to go
Language
C++17 (G++ 13.2.0)
Submit At
2025-06-20 20:40:01
Judged At
2025-06-20 20:40:01
Judged By
Score
100
Total Time
688ms
Peak Memory
2.77 MiB