ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#309 | #7. 「WyOJ Round 1」归 · 星穗垂野 | xxxbt | 0 | 2311ms | 37224kb | C++23 | 2.6kb | 2025-04-18 17:28:42 | 2025-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;
}
Details
小提示:点击横条可展开更详细的信息
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'