結果
問題 |
No.5022 XOR Printer
|
ユーザー |
![]() |
提出日時 | 2025-07-26 14:35:58 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 3,962 bytes |
コンパイル時間 | 3,341 ms |
コンパイル使用メモリ | 287,284 KB |
実行使用メモリ | 7,716 KB |
スコア | 5,155,949,650 |
最終ジャッジ日時 | 2025-07-26 14:36:04 |
合計ジャッジ時間 | 5,715 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
コンパイルメッセージ
In lambda function, inlined from ‘main()::<lambda(int, int)>’ at main.cpp:43:13, inlined from ‘int main()’ at main.cpp:97:14: main.cpp:18:19: warning: ‘one_i’ may be used uninitialized [-Wmaybe-uninitialized] 18 | while (ni > i) { | ~~~^~~ main.cpp: In function ‘int main()’: main.cpp:75:13: note: ‘one_i’ was declared here 75 | int one_i, one_j, one_dist = 1e9; | ^~~~~ In lambda function, inlined from ‘main()::<lambda(int, int)>’ at main.cpp:43:13, inlined from ‘int main()’ at main.cpp:97:14: main.cpp:26:19: warning: ‘one_j’ may be used uninitialized [-Wmaybe-uninitialized] 26 | while (nj > j) { | ~~~^~~ main.cpp: In function ‘int main()’: main.cpp:75:20: note: ‘one_j’ was declared here 75 | int one_i, one_j, one_dist = 1e9; | ^~~~~ In lambda function, inlined from ‘main()::<lambda(int, int)>’ at main.cpp:38:13, inlined from ‘int main()’ at main.cpp:99:13: main.cpp:18:19: warning: ‘zero_i’ may be used uninitialized [-Wmaybe-uninitialized] 18 | while (ni > i) { | ~~~^~~ main.cpp: In function ‘int main()’: main.cpp:76:13: note: ‘zero_i’ was declared here 76 | int zero_i, zero_j, zero_dist = 1e9; | ^~~~~~ In lambda function, inlined from ‘main()::<lambda(int, int)>’ at main.cpp:38:13, inlined from ‘int main()’ at main.cpp:99:13: main.cpp:26:19: warning: ‘zero_j’ may be used uninitialized [-Wmaybe-uninitialized] 26 | while (nj > j) { | ~~~^~~ main.cpp: In function ‘int main()’: main.cpp:76:21: note: ‘zero_j’ was declared here 76 | int zero_i, zero_j, zero_dist = 1e9; | ^~~~~~
ソースコード
#include <bits/stdc++.h> #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, t; cin >> n >> t; vector a(n, vector<int>(n)); rep(i, 0, n) rep(j, 0, n) cin >> a[i][j]; int hand = 0; int ni = 0, nj = 0; string ans; auto move = [&](int i, int j) { while (ni > i) { ans += 'U'; ni--; } while (ni < i) { ans += 'D'; ni++; } while (nj > j) { ans += 'L'; nj--; } while (nj < j) { ans += 'R'; nj++; } ni = i; nj = j; }; auto copy = [&](int i, int j) { move(i, j); ans += 'C'; hand ^= a[i][j]; }; auto write = [&](int i, int j) { move(i, j); ans += 'W'; a[i][j] ^= hand; }; rep(i, 0, n) rep(j, 0, n) { if ((hand == 0) && ((a[i][j] >> 19) & 1)) { copy(i, j); } } rep(i, 0, n) { if (i % 2 == 0) { for (int j = 0; j < n; j++) { if (!((a[i][j] >> 19) & 1)) { write(i, j); } } } else { for (int j = n - 1; j >= 0; j--) { if (!((a[i][j] >> 19) & 1)) { write(i, j); } } } } for (int d = 18; d >= 0; d--) { vector<vector<int>> exclusion(n, vector<int>(n)); int mask = (1 << 20) - (1 << (d + 2)); rep(i, 0, n) rep(j, 0, n) { if ((a[i][j] & mask) != mask) { exclusion[i][j] = 1; } } int one_i, one_j, one_dist = 1e9; int zero_i, zero_j, zero_dist = 1e9; rep(i, 0, n) rep(j, 0, n) { if (exclusion[i][j]) continue; int dist = abs(i - ni) + abs(j - nj); if ((a[i][j] >> d) & 1) { if (dist < one_dist) { one_dist = dist; one_i = i; one_j = j; } } else { if (dist < zero_dist) { zero_dist = dist; zero_i = i; zero_j = j; } } } if (one_dist == 1e9 || zero_dist == 1e9) { break; } write(one_i, one_j); copy(one_i, one_j); copy(zero_i, zero_j); if (d % 2 == 1) { for (int i = 0; i < n; i++) { if (i % 2 == 0) { for (int j = 0; j < n; j++) { if (exclusion[i][j]) continue; if (!((a[i][j] >> d) & 1)) { write(i, j); } } } else { for (int j = n - 1; j >= 0; j--) { if (exclusion[i][j]) continue; if (!((a[i][j] >> d) & 1)) { write(i, j); } } } } } else { for (int i = n - 1; i >= 0; i--) { if (i % 2 == 0) { for (int j = n - 1; j >= 0; j--) { if (exclusion[i][j]) continue; if (!((a[i][j] >> d) & 1)) { write(i, j); } } } else { for (int j = 0; j < n; j++) { if (exclusion[i][j]) continue; if (!((a[i][j] >> d) & 1)) { write(i, j); } } } } } } ans = ans.substr(0, t); for (auto &c : ans) { cout << c << '\n'; } }