結果

問題 No.3601 Queen Dist Sum with One Wall
コンテスト
ユーザー cho435
提出日時 2026-07-31 01:24:45
言語 C++23
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 2,352 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,363 ms
コンパイル使用メモリ 374,880 KB
実行使用メモリ 5,888 KB
最終ジャッジ日時 2026-07-31 01:24:54
合計ジャッジ時間 8,208 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 7 WA * 15
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
#include <atcoder/all>

using namespace std;
using ll = long long;
#define rep(i, s, t) for (ll i = s; i < (ll)(t); i++)
#define all(x) begin(x), end(x)

template <class T> bool chmin(T& x, T y) {
	return x > y ? (x = y, true) : false;
}
template <class T> bool chmax(T& x, T y) {
	return x < y ? (x = y, true) : false;
}

void solve() {
	ll h, w, sx, sy, x, y;
	cin >> h >> w >> sx >> sy >> x >> y;
	sx--, sy--, x--, y--;
	ll ans = h * w * 2;
	if (sx != x && sy != y) {
		ans -= h + w;
		if (sx + sy == x + y) {
			if (x < sx) {
				// y > sy
				// rep(i, x + 1, h) {
				// 	int j = x + y - i;
				// 	[x+y-h+1, y)
				// 	[0,y)
				// }
				ans -= min(y, x - h - 1);
			} else {
				// x > sx, y < sy
				// rep(i, 0, x) {
				// 	int j = x + y - i;
				// 	[y + 1, x + y + 1)
				// 	[y + 1, w)
				// }
				ans -= min(x, w - y - 1);
			}
		} else {
			// rep(i, 0, h) {
			// 	int j = sx + sy - i;
			// 	[sx+sy-h+1, sx + sy  + 1)
			// }
			ans -= min(sx + sy + 1, h + w - sx - sy - 1);
		}
		if (sx - sy == x - y) {
			if (sx < x) {
				// rep(i, 0, x) {
				// 	int j = i - x + y;
				// 	[-x+y, y)
				// 	[0, y)
				// }
				ans -= min(y, x);
			} else {
				// rep(i, x + 1, h) {
				// 	int j = i - x + y;
				// 	[y + 1, h -x + y)
				// 	[y + 1, w)
				// }
				ans -= min(h - x - 1, w - y - 1);
			}
		} else {
			// rep(i, 0, h) {
			// 	int j = i - sx + sy;
			// 	[-sx+sy, h-sx+sy)
			// }
			ans -= min(h - sx + sy, w + sx - sy);
		}
		cout << ans << '\n';
	} else {
		ans -= min(h - sx + sy, w + sx - sy);
		ans -= min(sx + sy + 1, h + w - sx - sy - 1);
		if (y == sy) {
			swap(h, w);
			swap(sx, sy);
			swap(x, y);
		}
		if (sx < h - 1 - sx) {
			x = h - 1 - x;
			sx = h - 1 - sx;
		}
		assert(x == sx);
		if (y < sy) {
			y = w - 1 - y;
			sy = w - 1 - sy;
		}

		ans -= h;
		ans -= y;
		int y2 = sx + sy;
		int y3 = sx * 2 + sy;
		// cout << ans << " ; " << y2 << ' ' << y3 << ' ' << y << ' ' << w <<
		// endl;
		if (y3 < w) {
			ans += w - 1 - y3;
		} else {
			y3 -= (y3 - w + 1) / 2 * 2;
		}
		// cout << ans << " ; " << y2 << ' ' << y3 << ' ' << y << ' ' << w <<
		// endl;
		int m = y3 - max<ll>(y2, y);
		ans += m / 2;
		cout << ans << '\n';
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout << fixed << setprecision(15);
	int t = 1;
	cin >> t;
	while (t--) solve();
}
0