QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#358049 | #6309. Aqre | JCY_ | WA | 4ms | 7840kb | C++14 | 2.8kb | 2024-03-19 16:41:39 | 2024-03-19 16:41:39 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using i128 = __int128;
using u128 = unsigned __int128;
template <typename T>
void chkmax(T &x, const T &y) {
if (x < y) x = y;
}
template <typename T>
void chkmin(T &x, const T &y) {
if (y < x) x = y;
}
constexpr int MAXN = 1010;
constexpr int dx[4] = {0, 1, 0, -1};
constexpr int dy[4] = {1, 0, -1, 0};
int n, m, ans;
bool a[MAXN][MAXN], res[MAXN][MAXN];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int cas;
cin >> cas;
while (cas--) {
cin >> n >> m;
if (n <= 3 && m <= 3) {
cout << n * m << "\n";
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) cout << '1';
cout << "\n";
}
continue;
}
bool flp = false;
if (m == 2) {
swap(n, m);
flp = true;
}
ans = 0;
static int p[4] = {0, 1, 2, 3};
do {
int cnt = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
a[i][j] = ((p[i % 4] + j) % 4 != 0);
cnt += a[i][j];
}
}
if (cnt > ans) {
bool can = true;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
if (a[i][j]) {
static pair<int, int> qu[MAXN * MAXN];
static bool vis[MAXN][MAXN];
int hd, tl;
for (int x = 1; x <= n; ++x) fill(vis[x] + 1, vis[x] + m + 1, false);
vis[i][j] = true;
qu[hd = tl = 1] = {i, j};
while (hd <= tl) {
int cx, cy;
tie(cx, cy) = qu[hd++];
for (int t = 0; t < 4; ++t) {
int nx = cx + dx[t], ny = cy + dy[t];
if (a[nx][ny] && !vis[nx][ny]) {
vis[nx][ny] = true;
qu[++tl] = {nx, ny};
}
}
}
if (tl == cnt) {
for (int t = 1; t <= n; ++t)
copy(a[t] + 1, a[t] + m + 1, res[t] + 1);
ans = cnt;
}
can = false;
break;
}
}
if (!can) break;
}
}
} while (next_permutation(p, p + 4));
cout << ans << "\n";
if (flp) {
for (int j = 1; j <= m; ++j) {
for (int i = 1; i <= n; ++i) cout << res[i][j];
cout << "\n";
}
} else {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) cout << res[i][j];
cout << "\n";
}
}
}
return 0;
}
/*
g++ wrong.cpp -o wrong -std=c++14 -O2 -Wall -Wextra -Wshadow -g
-fsanitize=address,undefined
*/
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 7760kb
input:
3 2 2 3 4 3 8
output:
4 11 11 9 1011 1101 0111 18 10111011 11011101 01110111
result:
ok ok (3 test cases)
Test #2:
score: -100
Wrong Answer
time: 4ms
memory: 7840kb
input:
361 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3 10 3 11 3 12 3 13 3 14 3 15 3 16 3 17 3 18 3 19 3 20 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 5 1...
output:
4 11 11 6 111 111 6 1101 0111 8 11101 10111 9 110111 011101 11 1110111 1011101 12 11011101 01110111 14 111011101 101110111 15 1101110111 0111011101 17 11101110111 10111011101 18 110111011101 011101110111 20 1110111011101 1011101110111 21 11011101110111 01110111011101 23 111011101110111 1011101110111...
result:
wrong answer 1s are not connected. (test case 22)