QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#674040#6309. Aqreji_114514#WA 11ms7952kbC++202.8kb2024-10-25 13:20:032024-10-25 13:20:03

Judging History

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

  • [2024-10-25 13:20:03]
  • 评测
  • 测评结果:WA
  • 用时:11ms
  • 内存:7952kb
  • [2024-10-25 13:20:03]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long

using namespace std;

const int N = 2e3 + 10;
int n, m, ans[N][N], te[N][N];
int p[] = {0, 3, 2, 4, 1};
int dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1};
bool vis[N][N];
bool check()
{
    int cnt = 0, u = 0, xt, yt;
    queue<int>q;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++) {
            cnt -= te[i][j];
            if (j >= 4)
            {
                int t[2] = {0};
                for (int k = 0; k < 4; k++)t[te[i][j - k]]++;
                if (!t[0] || !t[1])return 0;
            }
            if (i >= 4)
            {
                int t[2] = {0};
                for (int k = 0; k < 4; k++)t[te[i - k][j]]++;
                if (!t[0] || !t[1])return 0;
            }
            vis[i][j] = 0;
            if (te[i][j])u = (i - 1) * m + j, xt = i, yt = j;
        }
    }
    if (u)q.push(u), vis[xt][yt] = 1;
    while (!q.empty())
    {
        int u = q.front(); q.pop();
        cnt++;
        int x = (u - 1) / m + 1, y = (u - 1) % m + 1;
        for (int k = 0; k < 4; k++)
        {
            int nx = x + dx[k], ny = y + dy[k];
            if (nx == 0 || ny == 0 || nx > n || ny > m || vis[nx][ny] || te[nx][ny] == 0)continue;
            int v = (nx - 1) * m + ny;
            vis[nx][ny] = 1;
            q.push(v);
        }
    }
    return cnt == 0;
}

void solve()
{
    cin >> n >> m;
    int res = 0;
    for (int st = 0; st < 256; st++)
    {
        int temp = st;
        for (int i = 1; i <= 4; i++)
        {
            p[i] = temp % 4 + 1;
            temp /= 4;
        }
        int s = ((n + 3) / 4) * 4, t = ((m + 3) / 4) * 4;
        for (int i = 1; i <= s / 4; i++)
        {
            for (int k = 1; k <= 4; k++)
            {
                for (int j = 1; j <= t / 4; j++)
                {
                    for (int q = 1; q <= 4; q++)
                    {
                        int x = (i - 1) * 4 + k, y = (j - 1) * 4 + q;
                        if (p[k] == q)te[x][y] = 0;
                        else te[x][y] = 1;
                    }
                }
            }
        }
        int cnt = 0;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
                cnt += te[i][j];
        }
        if (cnt > res && check() ) {
            res = cnt;
            for (int i = 1; i <= n; i++)
                for (int j = 1; j <= m; j++)ans[i][j] = te[i][j];
        }
    }
    cout << res << '\n';
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
            cout << ans[i][j];
        cout << '\n';
    }
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t; cin >> t;
    while (t--)solve();
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 7628kb

input:

3
2 2
3 4
3 8

output:

4
11
11
9
0111
0111
0111
18
11011101
01110111
01110111

result:

ok ok (3 test cases)

Test #2:

score: -100
Wrong Answer
time: 11ms
memory: 7952kb

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
0111
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 ans finds a larger answer (test case 97)