結果

問題 No.3185 Three Abs
ユーザー elphe
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0