QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#243802#6309. AqreVengeful_Spirit#WA 2ms9624kbC++142.7kb2023-11-08 17:35:042023-11-08 17:35:05

Judging History

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

  • [2023-11-08 17:35:05]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:9624kb
  • [2023-11-08 17:35:04]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=1050;
int f[N * N];
int a[N][N], b[N][N];

int find(int k) {
    return f[k] == k ? f[k] : f[k] = find(f[k]);
}
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};

bool check(int n, int m) {
    for(int i = 1; i <= n * m; ++i) f[i] = i;
    for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) {
        if(!b[i][j]) continue;
        for(int o = 0; o < 4; ++o) {
            int x = i + dx[o], y = j + dy[o];
            if(x < 1 || x > n || y < 1 || y > m || !b[x][y]) continue;
            int u = (x - 1) * m + y, v = (i - 1) * m + j;
            int fu = find(u), fv = find(v);
            f[fu] = fv;
        }
    }
    int last = -1;
    for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) if(b[i][j]) {
        int pos = find((i - 1) * m + j);
        if(last != -1 && last != pos) {
            return 0;
        }
        last = pos;
    }
    return 1;
}

void solve() {
    int n, m;
    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";
        }
        return ;
    }

    long long c[4][4], ans = 0, _ii = 0, _jj = 0;

    for(int ii = 0; ii < 4; ++ii) for(int jj = 0; jj < 4; ++jj) {
        c[ii][jj] = 0;
        for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j)
            b[i][j] = a[i+ii][j+jj], c[ii][jj] += b[i][j];
        if(c[ii][jj]>ans) {
            if(check(n, m)) ans = c[ii][jj], _ii = ii, _jj = jj;
        }
    }

    for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) b[i][j] = a[i+_ii][j+_jj];
    if(n % 4 == 1 && m % 4 == 1 && _ii == 0 && _jj == 0) b[n][m] = 0;
    assert(check(n, m));
    ans = 0;
    for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) ans += b[i][j];
    cout << ans << "\n";
    for(int i = 1; i <= n; ++i) {
        for(int j = 1; j <= m; ++j) {
            cout << b[i][j];
        }
        cout << "\n";
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    for(int i = 1; i <= 1040; i += 4) {
        for(int j = 1; j <= 1040; j += 4) {
            for(int o : {0, 1, 2}) a[i][j + o] = 1;

            for(int o : {0, 2, 3}) a[i + 1][j + o] = 1;

            for(int o : {0, 1, 3}) a[i + 2][j + o] = 1;

            for(int o : {1, 2, 3}) a[i + 3][j + o] = 1;
        }
    }
    int T;
    cin >> T;
    for(int o = 1; o <= T; ++o) {
        solve();
    }
}

/*

11101110111
10111011101
11011101110
01110111011
11101110111
10111011101
11011101110
01110111011
11101110111
10111011101
11011101110


*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 9572kb

input:

3
2 2
3 4
3 8

output:

4
11
11
9
1110
1011
1101
18
11101110
10111011
11011101

result:

ok ok (3 test cases)

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 9624kb

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
1110
1011
8
11101
10111
9
111011
101110
11
1110111
1011101
12
11101110
10111011
14
111011101
101110111
15
1110111011
1011101110
17
11101110111
10111011101
18
111011101110
101110111011
20
1110111011101
1011101110111
21
11101110111011
10111011101110
23
111011101110111
1011101110111...

result:

wrong answer ans finds a larger answer (test case 25)