結果
問題 |
No.3185 Three Abs
|
ユーザー |
|
提出日時 | 2025-07-15 17:15:05 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,655 bytes |
コンパイル時間 | 987 ms |
コンパイル使用メモリ | 104,560 KB |
実行使用メモリ | 7,720 KB |
最終ジャッジ日時 | 2025-07-15 17:15:13 |
合計ジャッジ時間 | 7,441 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 14 WA * 16 |
ソースコード
#include <iostream> #include <cstdint> #include <vector> #include <cmath> template<typename T> static inline constexpr T chmax(T& variable, const T value) noexcept { if (variable < value) return (variable = value); else return variable; } static inline constexpr int_fast64_t prepare(const uint_fast32_t N, const std::vector<int_fast32_t>& A) noexcept { int_fast64_t total_A = 0; for (uint_fast32_t i = 0; i != N; ++i) total_A += A[i]; return total_A; } static inline constexpr int_fast64_t solve(const uint_fast32_t N, const std::vector<int_fast32_t>& A) noexcept { const int_fast64_t total_A = prepare(N, A); int_fast64_t ans = abs(A[0]) + abs(A[1]) + abs(total_A - A[0] - A[1]); int_fast64_t low_left_sum = A[0], high_left_sum = A[0], low_right_sum = A[1], high_right_sum = A[1], rest_sum = total_A - A[0] - A[1]; for (uint_fast32_t i = 2; i != N; ++i) { rest_sum -= A[i]; if (std::signbit(high_right_sum)) low_left_sum += high_right_sum, high_right_sum = A[i]; else high_right_sum += A[i]; chmax(ans, std::abs(low_left_sum) + std::abs(high_right_sum) + std::abs(rest_sum)); if (!std::signbit(low_right_sum)) high_left_sum += low_right_sum, low_right_sum = A[i]; else low_right_sum += A[i]; chmax(ans, std::abs(high_left_sum) + std::abs(low_right_sum) + std::abs(rest_sum)); } return ans; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); uint_fast32_t T, i; std::cin >> T; for (i = 0; i != T; ++i) { uint_fast32_t N, i; std::cin >> N; std::vector<int_fast32_t> A(N); for (i = 0; i != N; ++i) std::cin >> A[i]; std::cout << solve(N, A) << '\n'; } return 0; }