結果

問題 No.3601 Queen Dist Sum with One Wall
コンテスト
ユーザー cho435
提出日時 2026-07-31 01:53:13
言語 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  
実行時間 -
コード長 3,477 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,558 ms
コンパイル使用メモリ 376,512 KB
実行使用メモリ 5,888 KB
最終ジャッジ日時 2026-07-31 01:53:42
合計ジャッジ時間 8,713 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--;
	// h = 100, w = 100;
	// sx = rand() % h, sy = rand() % w;
	// x = sx;
	// y = sy;
	// do {
	// 	x = rand() % h;
	// } while (x == sx);
	// do {
	// 	y = rand() % w;
	// } while (y == sy);
	// cout << " -> " << h << " " << w << ' ' << sx << ' ' << sy << ' ' << x <<
	// ' '
	// 	 << y << endl;

	ll gd = [&]() {
		return 0ll;
		vector<vector<int>> cnt(h, vector<int>(w, 1e9));
		vector<int> dx = {0, 1, 1, 1, 0, -1, -1, -1};
		vector<int> dy = {1, 1, 0, -1, -1, -1, 0, 1};
		auto isin = [&](int a, int b) {
			return (0 <= a && a < h && 0 <= b && b < w && (a != x || b != y));
		};

		vector<array<int, 2>> q;
		q.push_back({(int)sx, (int)sy});
		cnt[sx][sy] = 0;
		rep(lp, 0, q.size()) {
			auto [xx, yy] = q[lp];
			rep(d, 0, 8) {
				int nx = xx + dx[d], ny = yy + dy[d];
				while (isin(nx, ny)) {
					if (chmin(cnt[nx][ny], cnt[xx][yy] + 1))
						q.push_back({nx, ny});
					nx += dx[d], ny += dy[d];
				}
			}
		}

		ll res = 0;
		rep(i, 0, h) rep(j, 0, w) {
			if (i != x || j != y) res += cnt[i][j];
		}
		return res;
	}();

	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, h - x - 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;
		ans += max((y3 - max<ll>(y2, y)) / 2, 0ll);
		// cout << ans << '\n';
	}
	// cout << gd << ' ' << ans << endl;
	// assert(gd == ans);
	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