QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#358049#6309. AqreJCY_WA 4ms7840kbC++142.8kb2024-03-19 16:41:392024-03-19 16:41:39

Judging History

你现在查看的是最新测评结果

  • [2024-03-19 16:41:39]
  • 评测
  • 测评结果:WA
  • 用时:4ms
  • 内存:7840kb
  • [2024-03-19 16:41:39]
  • 提交

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)