Logo Wy Online Judge

WyOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#297#7. 「WyOJ Round 1」归 · 星穗垂野recall0143ms21580kbC++142.7kb2025-04-18 17:12:052025-04-18 18:05:01

answer

#include <bits/stdc++.h>

using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
// using i128 = __int128;
// using u128 = unsigned __int128;

inline void solve() {
    int n;
    i64 c, ans = LLONG_MAX;
    std::cin >> n >> c;
    std::vector<int> a(n + 1);
    std::vector<i64> b(n + 1), s(n + 1);
    for (int i = 1; i <= n; i++) std::cin >> a[i];
    for (int i = 1; i <= n; i++) {
        std::cin >> b[i];
        s[i] = s[i - 1] + b[i];
    }

    std::vector<std::vector<std::pair<int, i64>>> dp(n + 1);
    dp[0].emplace_back(0, 0);

    std::vector<std::pair<int,int>> p(20), empty(20) , tmp(20);//log n=20

    //get gcd
    //直接存下所有different gcd和其左端点即可
    for (int i = 1; i <= n; i++) {
        tmp = empty;
        for (auto &[w, v] : p) {
            int nw = std::__gcd(w, a[i]);
            if (tmp.empty()) {
                tmp.emplace_back(nw, v);
            } else if (p.back().first ^ nw) {
                tmp.emplace_back(nw, v);
            }
        }
        if (tmp.empty()) {
            tmp.emplace_back(a[i], i);
        } else if (tmp.back().first ^ a[i]) {
            tmp.emplace_back(a[i], i);
        }
        std::swap(p, tmp);

        int len = p.size();
        std::vector<std::pair<int, i64>> tp(len);
        for (int j = 0; j < len; j++) {
            auto [w, l] = p[j];
            int r = i;
            if (j + 1 < len) r = p[j + 1].second;
            int ll = i - w + 1;
            if (ll < l || ll > r) {
                continue;
            }
            int kk = ll - 1;
            auto &v = dp[kk];
            int L = 0, R = (int)v.size() - 1, pos = -1;
            while (L <= R) {
                int mid = (L + R) >> 1;
                if (v[mid].first <= w) {
                    pos = mid;
                    L = mid + 1;
                } else {
                    R = mid - 1;
                }
            }
            if(pos >= 0){
                i64 val = v[pos].second + (i64)w * (s[i] - s[kk]) + c;
                tp.emplace_back(w, val);
            }
        }
        if(tp.empty()) {
            dp[i].clear();
        } else {
            sort(tp.begin(), tp.end(), [](auto &x, auto &y){return x.first < y.first;});
            for (int i = 1; i < (int)tp.size(); i++) {
                tp[i].second = std::min(tp[i].second, tp[i-1].second);
            }
            dp[i].swap(tp);
            ans = std::min(ans, dp[i].back().second);
        }
    }
    std::cout << ans << '\n';
}

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0), std::cout.tie(0);
    
    int t;
    std::cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}

Details

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

Test #1:

score: 0
Wrong Answer
time: 36ms
memory: 3572kb

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:

-3037806973
-2859101918
-28465508
-3610161449
-4517247129
-7667829364
-864874438
-3399933976
-199175...

result:

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

Test #2:

score: 0
Time Limit Exceeded

input:

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

output:


result:


Test #3:

score: 0
Wrong Answer
time: 73ms
memory: 21580kb

input:

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

output:

-14419408695
-1847288878
-1734787130
-1644394446
-2911839144

result:

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

Test #4:

score: 0
Wrong Answer
time: 34ms
memory: 12120kb

input:

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

output:

-10608386110
-9785652054
-511813771
-1059581333
-3901147522

result:

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

Test #5:

score: 0
Runtime Error

input:

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

output:


result:


Test #6:

score: 0
Runtime Error

input:

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

output:


result:


Test #7:

score: 0
Time Limit Exceeded

input:

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

output:


result:


Test #8:

score: 0
Time Limit Exceeded

input:

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

output:


result:


Test #9:

score: 0
Runtime Error

input:

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

output:


result:


Test #10:

score: 0
Time Limit Exceeded

input:

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

output:


result: