Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#309#7. 「WyOJ Round 1」归 · 星穗垂野xxxbt02311ms37224kbC++232.6kb2025-04-18 17:28:422025-04-18 18:05:58

answer

#include <bits/stdc++.h>

using namespace std;

struct node {
  long long g, s;
};

int T, n, C;
vector<long long> a, b, pre;

long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  for (cin >> T; T--;) {
    cin >> n >> C, a.resize(n + 1), b.resize(n + 1);
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) cin >> b[i];
    pre.resize(n + 1), pre[0] = 0;
    for (int i = 1; i <= n; i++) pre[i] = pre[i - 1] + b[i];
    vector<vector<node>> inv(n + 1);
    vector<node> p;
    for (int i = 1; i <= n; i++) {
      vector<node> cur;
      cur.push_back({a[i], i});
      for (const auto& [g, s] : p) {
        if (gcd(g, a[i]) == cur.back().g) {
          cur.back().s = s;
        } else {
          cur.push_back({gcd(g, a[i]), s});
        }
      }
      p = cur, inv[i] = cur;
    }
    vector<long long> k = {1}, v = {0};
    long long L_max = 1;
    for (int i = 1; i <= n; i++) {
      auto& intervals = inv[i];
      map<long long, long long> tmp;
      for (const auto& [g, s] : intervals) {
        if (i - s + 1 >= max(g, L_max)) {
          int pos = upper_bound(k.begin(), k.end(), g) - k.begin() - 1;
          if (pos >= 0) {
            if (tmp.count(i - s + 1)) {
              if (v[pos] + g * (pre[i] - pre[s - 1]) + C < tmp[i - s + 1]) {
                tmp[i - s + 1] = v[pos] + g * (pre[i] - pre[s - 1]) + C;
              }
            } else {
              tmp[i - s + 1] = v[pos] + g * (pre[i] - pre[s - 1]) + C;
            }
          }
        }
      }
      for (const auto& [len, val] : tmp) {
        if (len >= L_max) {
          if (k.empty() || len > k.back()) {
            k.push_back(len);
            if (v.empty()) {
              v.push_back(val);
            } else {
              v.push_back(min(v.back(), val));
            }
          } else {
            int pos = k.size() - 1;
            for (; pos >= 0 && k[pos] > len; pos--);
            if (pos >= 0 && k[pos] == len && val < v[pos]) {
              v[pos] = val;
              for (int j = pos; j < k.size(); j++) {
                if (j == 0) {
                  v[j] = val;
                } else {
                  v[j] = min(v[j - 1], val);
                }
              }
            }
          }
          L_max = max(L_max, len);
        }
      }
    }
    long long ans = 1e18;
    for (size_t i = 0; i < k.size(); i++) {
      if (k[i] >= 1) {
        ans = min(ans, v[i]);
      }
    }
    cout << ans << '\n';
  }
  return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 0
Wrong Answer
time: 8ms
memory: 3336kb

input:

1000
10 -759451753
8 10 5 7 5 10 6 10 2 1
5 6 5 4 9 8 5 4 1 3
10 -953033990
4 10 10 8 8 2 1 7 4 1
0 ...

output:

-759451737
-1906067958
-7116365
-601693565
-645321013
-851981030
-216218611
-849983489
-995876454
-4...

result:

wrong answer 1st numbers differ - expected: '-2278355214', found: '-759451737'

Test #2:

score: 0
Wrong Answer
time: 213ms
memory: 12972kb

input:

5
94253 6998801
88374 94432 21568 79110 3746 94223 86214 12083 54743 1622 16110 18595 18994 3665 547...

output:

0
0
0
0
0

result:

wrong answer 1st numbers differ - expected: '6999125', found: '0'

Test #3:

score: 0
Wrong Answer
time: 3ms
memory: 3496kb

input:

5
120 -848255662
53358 95098 92852 36846 80052 83050 44071 22632 50005 52339 7339 38495 66618 6337 5...

output:

-1695787432
-131817543
-192754122
-1644387846
-970613020

result:

wrong answer 1st numbers differ - expected: '-11025209476', found: '-1695787432'

Test #4:

score: 0
Wrong Answer
time: 2ms
memory: 3548kb

input:

5
100 -964452256
94167 36596 60051 82090 55625 56197 94589 29844 14929 68497 81714 90264 66283 96767...

output:

-964316076
-978582824
-42651144
-706375422
-975286879

result:

wrong answer 1st numbers differ - expected: '-7714370390', found: '-964316076'

Test #5:

score: 0
Wrong Answer
time: 8ms
memory: 3668kb

input:

5
984 -715414516
65632 15191 55392 53178 88695 20308 44882 16528 12986 81169 76880 2239 81264 13866 ...

output:

-715341223
-552032935
-702143874
-1988346927
-649898820

result:

wrong answer 1st numbers differ - expected: '-72952473687', found: '-715341223'

Test #6:

score: 0
Wrong Answer
time: 423ms
memory: 33240kb

input:

5
83593 -175988991
46605 26358 5204 30137 41225 11710 75224 14130 56433 62524 29873 59483 22318 2619...

output:

-175857195
-443671116
-1050900550
-557669544
-731272372

result:

wrong answer 1st numbers differ - expected: '-1656361289384', found: '-175857195'

Test #7:

score: 0
Wrong Answer
time: 447ms
memory: 35976kb

input:

5
96302 -451340376
2672 47391 49737 61648 38099 10679 28316 91168 97182 40556 20560 89630 45931 9187...

output:

-451280243
-692879729
-284571102
0
-1084906644

result:

wrong answer 1st numbers differ - expected: '-4877361987440', found: '-451280243'

Test #8:

score: 0
Wrong Answer
time: 418ms
memory: 37224kb

input:

5
82075 -915749780
41503 94470 21657 60519 10090 65640 80911 29436 63096 68715 79609 87499 26240 606...

output:

-1831321060
-177874618
-826532953
-773782467
-1251555012

result:

wrong answer 1st numbers differ - expected: '-8500967499879', found: '-1831321060'

Test #9:

score: 0
Wrong Answer
time: 389ms
memory: 31200kb

input:

5
86206 -158351237
12910 53574 97622 75378 61116 40492 87106 60678 72614 2146 43673 15147 23123 7469...

output:

-316161196
-848176184
-3225956282
-1243708736
-894826102

result:

wrong answer 1st numbers differ - expected: '-1508037508585', found: '-316161196'

Test #10:

score: 0
Wrong Answer
time: 400ms
memory: 31104kb

input:

5
87683 -236086252
88768 76878 54808 98282 70961 83599 48353 34381 40413 95288 24241 74500 52966 994...

output:

-471471810
-976936798
-1674254015
-1182698420
-597881699

result:

wrong answer 1st numbers differ - expected: '-2319782085288', found: '-471471810'