ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#247 | #7. 「WyOJ Round 1」归 · 星穗垂野 | Un1quAIoid | 10 | 2605ms | 31376kb | C++23 | 2.3kb | 2025-04-18 14:47:19 | 2025-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;
}
详细
小提示:点击横条可展开更详细的信息
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'