結果
| 問題 |
No.5022 XOR Printer
|
| コンテスト | |
| ユーザー |
SnowBeenDiding
|
| 提出日時 | 2025-07-26 14:41:07 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 3,536 bytes |
| コンパイル時間 | 3,145 ms |
| コンパイル使用メモリ | 288,364 KB |
| 実行使用メモリ | 7,716 KB |
| スコア | 5,165,159,978 |
| 最終ジャッジ日時 | 2025-07-26 14:41:13 |
| 合計ジャッジ時間 | 5,779 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge6 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
コンパイルメッセージ
In lambda function,
inlined from ‘main()::<lambda(int, int)>’ at main.cpp:43:13,
inlined from ‘int main()’ at main.cpp:102: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:80:13: note: ‘one_i’ was declared here
80 | 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:102: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:80:20: note: ‘one_j’ was declared here
80 | 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:104: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:81:13: note: ‘zero_i’ was declared here
81 | 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:104: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:81:21: note: ‘zero_j’ was declared here
81 | 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;
};
auto update = [&](int i, int j) {
if ((a[i][j] ^ hand) > a[i][j]) {
write(i, j);
}
};
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++) {
update(i, j);
}
} else {
for (int j = n - 1; j >= 0; j--) {
update(i, j);
}
}
}
} else {
for (int i = n - 1; i >= 0; i--) {
if (i % 2 == 0) {
for (int j = n - 1; j >= 0; j--) {
update(i, j);
}
} else {
for (int j = 0; j < n; j++) {
update(i, j);
}
}
}
}
}
ans = ans.substr(0, t);
for (auto &c : ans) {
cout << c << '\n';
}
}
SnowBeenDiding