結果
| 問題 | No.3739 Stronger Network |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-19 17:55:38 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 2,336 bytes |
| 記録 | |
| コンパイル時間 | 2,689 ms |
| コンパイル使用メモリ | 351,456 KB |
| 実行使用メモリ | 32,644 KB |
| 最終ジャッジ日時 | 2026-09-19 17:55:52 |
| 合計ジャッジ時間 | 6,615 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 39 WA * 9 |
ソースコード
#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(countr_zero((unsigned)(j + 1)));
}
gi.back() = (i - 1);
if (H & (1 << i)) {
vector<int> ngh;
if (gh.size() == 0) {
ngh = gi;
} else {
ngh.push_back(i);
for (int j: gh) ngh.push_back(j);
ngh.back() = 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(i);
for (int j: gw) ngw.push_back(j);
ngw.back() = 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;
}
}
int mh = *max_element(gh.begin(), gh.end()) + 1, mw = *max_element(gw.begin(), gw.end()) + 1;
vector<vector<int>> ans;
int ansm = 1e9;
// h
for (int l = 0; l <= mw; l++) {
vector<int> P(H), Q(W);
for (int i = 0; i < H - 1; i++) {
P[i + 1] = P[i] ^ (1 << (l + gh[i]));
}
for (int i = 0; i < W - 1; i++) {
Q[i + 1] = Q[i] ^ (1 << (gw[i] < l ? gw[i] : mh + gw[i]));
}
vector<vector<int>> nans(H, vector<int>(W));
int nm = 0;
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
nans[i][j] = P[i] | Q[j];
nm = max(nm, nans[i][j]);
}
}
if (nm < ansm) {
ansm = nm; ans = nans;
}
}
// w
for (int l = 0; l <= mh; l++) {
vector<int> P(H), Q(W);
for (int i = 0; i < H - 1; i++) {
P[i + 1] = P[i] ^ (1 << (gh[i] < l ? gh[i] : mw + gh[i]));
}
for (int i = 0; i < W - 1; i++) {
Q[i + 1] = Q[i] ^ (1 << (l + gw[i]));
}
vector<vector<int>> nans(H, vector<int>(W));
int nm = 0;
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
nans[i][j] = P[i] | Q[j];
nm = max(nm, nans[i][j]);
}
}
if (nm < ansm) {
ansm = nm; ans = nans;
}
}
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cout << ans[i][j] << (j == W - 1 ? '\n' : ' ');
}
}
}