ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#203863 | #3569. 最优子序列 | lsr | 100 | 141ms | 10248kb | C++11 | 1.3kb | 2024-03-24 11:16:12 | 2024-03-24 12:05:24 |
answer
#include <bits/stdc++.h>
using namespace std;
#define QwQ3301AwA return 0
#define ll long long
const int N = 2e5 + 5;
int n, m;
vector <int> pos[N];
int w[N];
ll ans = 0;
int val[N];
bool vis[N];
ll f[N][2];
void solve(vector <int> a, vector <int> b) {
int cn = 0;
int ia = 0, ib = 0;
while (ia < (int)a.size() && ib < (int)b.size()) {
if (a[ia] < b[ib]) cn++, val[cn] = w[a[ia]], vis[cn] = 0, ia++;
else cn++, val[cn] = w[b[ib]], vis[cn] = 1, ib++;
}
while (ia < (int)a.size()) cn++, val[cn] = w[a[ia]], vis[cn] = 0, ia++;
while (ib < (int)b.size()) cn++, val[cn] = w[b[ib]], vis[cn] = 1, ib++;
f[0][0] = f[0][1] = 0;
for (int i = 1; i <= cn; i++) {
f[i][0] = f[i - 1][0];
f[i][1] = f[i - 1][1];
if (vis[i] == 0) f[i][0] = max(f[i][0], f[i - 1][1] + val[i]);
else f[i][1] = max(f[i][1], f[i - 1][0] + val[i]);
}
ans = max(ans, max(f[cn][0], f[cn][1]));
}
void rsolve(vector <int> a) {
ll sum = 0;
for (auto x : a) sum += w[x];
ans = max(ans, sum);
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> w[i];
pos[w[i] % m].push_back(i);
}
for (int i = 1; i <= m / 2; i++) {
if (m - i == i) continue;
solve(pos[i], pos[m - i]);
}
rsolve(pos[0]);
if (m % 2 == 0) rsolve(pos[m / 2]);
cout << ans;
QwQ3301AwA;
}
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 0ms
memory: 5968kb
input:
20 13 749987623 375211210 944589514 64972338 389342463 507674971 991531334 890802757 32576979 781213...
output:
2166559486
result:
ok single line: '2166559486'
Test #2:
score: 10
Accepted
time: 3ms
memory: 5972kb
input:
20 15 99582796 12294885 852348789 926605817 849204941 270471458 892887566 974067892 841800457 157511...
output:
2612569905
result:
ok single line: '2612569905'
Test #3:
score: 10
Accepted
time: 4ms
memory: 5964kb
input:
20 114514 292793712 565481935 809761776 941466148 554645876 177476807 703263128 623014274 810635044 ...
output:
941466148
result:
ok single line: '941466148'
Test #4:
score: 10
Accepted
time: 0ms
memory: 6032kb
input:
5000 100 947291260 964017567 669765758 43013623 53333014 819988146 911217742 494187329 319940221 106...
output:
46295823400
result:
ok single line: '46295823400'
Test #5:
score: 10
Accepted
time: 0ms
memory: 6036kb
input:
5000 2 964428160 970707036 188825719 674826526 726016066 685695742 349231170 584008877 274267609 734...
output:
1268402153500
result:
ok single line: '1268402153500'
Test #6:
score: 10
Accepted
time: 0ms
memory: 6088kb
input:
5000 5000 972867911 291165229 665116301 137971950 441605559 496300169 443483413 438670482 148278584 ...
output:
4230095000
result:
ok single line: '4230095000'
Test #7:
score: 10
Accepted
time: 38ms
memory: 10248kb
input:
200000 151515 452179336 951343439 696121316 19484808 308437468 425400338 992090515 244609102 3305997...
output:
6555540551
result:
ok single line: '6555540551'
Test #8:
score: 10
Accepted
time: 48ms
memory: 8876kb
input:
200000 51113 667097295 591541403 926240086 85226095 181629757 152240070 721023193 735997444 65337067...
output:
9435153122
result:
ok single line: '9435153122'
Test #9:
score: 10
Accepted
time: 25ms
memory: 8188kb
input:
200000 177 166454880 278617410 567880671 333893483 19488273 411375222 356160463 802630092 539902174 ...
output:
737190980432
result:
ok single line: '737190980432'
Test #10:
score: 10
Accepted
time: 23ms
memory: 8364kb
input:
200000 14 585315962 94718848 884602638 130460488 727305959 336131767 678306907 786520584 588410644 6...
output:
8849689714432
result:
ok single line: '8849689714432'
Extra Test:
score: 0
Extra Test Passed