QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#601370 | #978. Maximum Subsequence | fractal# | WA | 0ms | 3524kb | C++17 | 1.7kb | 2024-09-29 22:35:46 | 2024-09-29 22:35:46 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define sz(x) (int)x.size()
const int N = 1e6;
long long n;
long long a[N];
long long solve(vector<long long> A) {
int m = A.size() - 1;
long long ans = A[0] + A[m] + (A[0] + A[m]) / 2 * (m - 1);
int i = 0, j = m;
for (int k = 1; k < m; ++k) {
if (A[i] * (j - k) + A[j] * (k - i) < A[k] * (j - i)) {
ans += (-(A[i] * (j - k) + A[j] * (k - i)) + A[k] * (j - i)) / 2;
i = k;
}
}
return ans;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
a[i] *= 2;
}
long long mx = *max_element(a + 1, a + n + 1);
int L = n + 1, R = 0;
for (int i = 1; i <= n; ++i) {
if (a[i] == mx) {
L = min(L, i);
R = max(R, i);
}
}
long long ans = 0;
vector<long long> v;
if (L == n || R == 1) {
v = vector<long long>(a + 1, a + n + 1);
if (R == 1) reverse(v.begin(), v.end());
ans += solve(v);
}
else {
ans += mx * max(0, (R - L - 1)) / 2;
if (L > 1) {
v = vector<long long>(a + 1, a + L + 1);
ans += solve(v);
}
if (R < n) {
v = vector<long long>(a + R, a + n + 1);
reverse(v.begin(), v.end());
ans += solve(v);
}
if (L == R) ans -= mx;
}
long long r = 1;
n *= 2;
const int mod = 998244353;
long long pw = mod - 2;
while (pw) {
if (pw & 1) r = (r * n) % mod;
n = (n * n) % mod;
pw /= 2;
}
ans = (ans * r) % mod;
cout << ans << '\n';
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3524kb
input:
4 1 -1 1 1
output:
748683265
result:
wrong answer 1st numbers differ - expected: '2', found: '748683265'