結果

問題 No.3739 Stronger Network
コンテスト
ユーザー hiro1729
提出日時 2026-09-19 16:33:58
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,670 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,641 ms
コンパイル使用メモリ 344,152 KB
実行使用メモリ 10,048 KB
最終ジャッジ日時 2026-09-19 16:34:04
合計ジャッジ時間 5,966 ms
ジャッジサーバーID
(参考情報)
judge4_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 32 WA * 16
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);

	int H, W; cin >> H >> W;
	if (H % 2 == 1 || W % 2 == 1) {
		cout << "-1\n";
		return 0;
	}
	vector<int> gh, gw;
	for (int i = 1; i < 20; i++) {
		vector<int> gi;
		for (int j = 0; j < (1 << i); j++) {
			gi.push_back(1 << countr_zero((unsigned)(j + 1)));
		}
		gi.back() = (1 << (i - 1));
		if (H & (1 << i)) {
			vector<int> ngh;
			if (gh.size() == 0) {
				ngh = gi;
			} else {
				ngh.push_back((1 << i));
				for (int j: gh) ngh.push_back(j);
				ngh.back() = (1 << i);
				int l = find(gi.begin(), gi.end(), gh.back()) - gi.begin();
				for (int j = 1; j < (1 << i); j++) ngh.push_back(gi[(l + j) % (1 << i)]);
			}
			gh = ngh;
		}
		if (W & (1 << i)) {
			vector<int> ngw;
			if (gw.size() == 0) {
				ngw = gi;
			} else {
				ngw.push_back((1 << i));
				for (int j: gw) ngw.push_back(j);
				ngw.back() = (1 << i);
				int l = find(gi.begin(), gi.end(), gw.back()) - gi.begin();
				for (int j = 1; j < (1 << i); j++) ngw.push_back(gi[(l + j) % (1 << i)]);
			}
			gw = ngw;
		}
	}
	for (int i = 0; i < H - 1; i++) gh[i + 1] ^= gh[i];
	for (int i = 0; i < W - 1; i++) gw[i + 1] ^= gw[i];
	if ((H - 1) * bit_ceil((unsigned)W) + W - 1 < (W - 1) * bit_ceil((unsigned)H) + H - 1) {
		int c = bit_ceil((unsigned)W);
		for (int i = 0; i < H; i++) {
			for (int j = 0; j < W; j++) {
				cout << gh[i] * c + gw[j] << (j == W - 1 ? '\n' : ' ');
			}
		}
	} else {
		int c = bit_ceil((unsigned)H);
		for (int i = 0; i < H; i++) {
			for (int j = 0; j < W; j++) {
				cout << gh[i] + gw[j] * c << (j == W - 1 ? '\n' : ' ');
			}
		}
	}
}
0