Logo Wy Online Judge

WyOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#247#7. 「WyOJ Round 1」归 · 星穗垂野Un1quAIoid102605ms31376kbC++232.3kb2025-04-18 14:47:192025-04-18 18:01:38

answer

#include <bits/stdc++.h>
#define lowbit(x) (x & -x)
#define eb emplace_back
#define pb push_back
#define mp make_pair
using namespace std;

typedef long long ll;
const int N = 1e5+5;
const int Mod = 998244353;

int n, m, C, a[N];
int g[N][17], lg[N];
ll ans = 1e18, b[N];

int qry(int l, int r) {
    int len = lg[r - l + 1];
    return __gcd(g[l][len], g[r - (1 << len) + 1][len]);
}

struct seg {
    int l, r;
    int g, len;
    ll f, w;
};
vector<seg> P;
vector<int> L[N], R[N];

struct minBIT {
    ll T[N];
    inline void upd(int x, ll k) { for (; x <= n; x += lowbit(x)) T[x] = min(T[x], k); }
    inline ll qry(int x) { ll ret = 0; for (; x; x -= lowbit(x)) ret = min(ret, T[x]); return ret; }
} T;

void solve() {
    scanf("%d%d", &n, &C);
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++) scanf("%lld", &b[i]), b[i] += b[i - 1];

    for (int i = 2; i <= n; i++) lg[i] = lg[i >> 1] + 1;
    for (int i = n; i; i--) {
        g[i][0] = a[i];
        for (int j = 1; i + (1 << j) - 1 <= n; j++)
            g[i][j] = __gcd(g[i][j - 1], g[i + (1 << j - 1)][j - 1]);
    }

    P.clear();
    for (int i = 1; i <= n; i++) {
        int lst = i - 1, cg = a[i];
        while (lst != n) {
            int l = lst + 1, r = n, nxt = l;

            cg = qry(i, l);
            while (l <= r) {
                int mid = (l + r) >> 1;
                if (qry(i, mid) == cg) l = mid + 1, nxt = mid;
                else r = mid - 1;
            }
            int r1 = max(lst + 1, i + cg - 1);
            if (r1 <= nxt) {
                P.pb((seg) { i, r1, cg, r1 - i + 1, 0ll, cg * (b[r1] - b[i - 1]) });
            }
            lst = nxt;
        }
    }

    m = P.size();
    for (int i = 0; i < m; i++) {
        L[P[i].l].pb(i);
        R[P[i].r].pb(i);
        // printf("|%d %d %d %lld|\n", P[i].l, P[i].r, P[i].g, &P[i].w);
    }

    memset(T.T, 0x3f, sizeof(T.T));
    for (int i = 1; i <= n; i++) {
        for (int j : L[i])
            P[j].f = T.qry(P[j].g) + C + P[j].w;

        for (int j : R[i])
            T.upd(P[j].len, P[j].f);
    }

    ans = 1e18;
    for (int i = 0; i < m; i++)
        ans = min(ans, P[i].f);

    printf("%lld\n", ans);
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) solve();
    return 0;
}

Details

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

Test #1:

score: 0
Wrong Answer
time: 130ms
memory: 6392kb

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:

-2278355214
-3812135888
-35581787
-1805080685
-1290642033
-851981042
-1081093012
-2549950475
-199175...

result:

wrong answer 2nd numbers differ - expected: '-2859101918', found: '-3812135888'

Test #2:

score: 10
Accepted
time: 265ms
memory: 24088kb

input:

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

output:

6999125
764376403
718240695
1381649585
885156744

result:

ok 5 number(s): "6999125 764376403 718240695 1381649585 885156744"

Test #3:

score: 0
Wrong Answer
time: 5ms
memory: 6320kb

input:

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

output:

-11025209476
-5402451654
-10023214068
-87975012411
-25235938475

result:

wrong answer 2nd numbers differ - expected: '-3953017107', found: '-5402451654'

Test #4:

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

input:

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

output:

-7714370390
-27397367362
-980976134
-29668341524
-12678729289

result:

wrong answer 2nd numbers differ - expected: '-19569375783', found: '-27397367362'

Test #5:

score: 0
Wrong Answer
time: 4ms
memory: 8592kb

input:

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

output:

-72952473687
-107623711110
-33085005643
-83509558686
-49069064459

result:

wrong answer 2nd numbers differ - expected: '-64021627506', found: '-107623711110'

Test #6:

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

input:

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

output:

-1656361289384
-8302544781344
-205591396010
-10681751709222
-2351636273649

result:

wrong answer 2nd numbers differ - expected: '-4920133073293', found: '-8302544781344'

Test #7:

score: 0
Wrong Answer
time: 467ms
memory: 31376kb

input:

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

output:

-4877361987440
-15569123169416
-70820129391
-568996386173
-2353543786436

result:

wrong answer 2nd numbers differ - expected: '-9327808595024', found: '-15569123169416'

Test #8:

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

input:

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

output:

-8500967499879
-3529190351684
-291581517471
-15358189250418
-4791486327746

result:

wrong answer 2nd numbers differ - expected: '-2162204721519', found: '-3529190351684'

Test #9:

score: 0
Wrong Answer
time: 432ms
memory: 30332kb

input:

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

output:

-1508037508585
-7943544175173
-631125358927
-23578180298496
-1611946472730

result:

wrong answer 2nd numbers differ - expected: '-4714642449519', found: '-7943544175173'

Test #10:

score: 0
Wrong Answer
time: 448ms
memory: 30216kb

input:

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

output:

-2319782085288
-18589766053971
-294315577516
-23817970851700
-2157527363832

result:

wrong answer 2nd numbers differ - expected: '-10990638538852', found: '-18589766053971'