QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#202369#6644. Red Black Gridarseny_y#AC ✓88ms25612kbC++236.4kb2023-10-05 23:39:112023-10-05 23:39:11

Judging History

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

  • [2023-10-05 23:39:11]
  • 评测
  • 测评结果:AC
  • 用时:88ms
  • 内存:25612kb
  • [2023-10-05 23:39:11]
  • 提交

answer

//I wrote this code 4 u today
#include <bits/stdc++.h>

template<class t> using vc = std::vector<t>;

#define nd node*
#define pnd pair<nd, nd>

//using namespace std;
typedef long long ll;

template<const ll MOD>
struct mod_mul : std::multiplies<const ll> {
    ll operator()(const ll a, const ll b) {
        return (a * b) % MOD;
    }
};


template<typename T>
inline void sort(T &a) {
    sort(a.begin(), a.end());
}

template<typename T>
inline void unique(T &a) {
    a.resize(unique(a.begin(), a.end()) - a.begin());
}

template<typename T>
inline void reverse(T &a) {
    reverse(a.begin(), a.end());
}

const ll INF = 9023372036854775808ll;
const ll MOD = 1000000007ll;

std::pair<int, int> q[4] = {{0,  1},
                            {1,  0},
                            {0,  -1},
                            {-1, 0}};

int a[3005][3005];
int max = 0;

int n, k;

int lz = 0;
bool hra = false;

bool ger(int i, int j, int dep = 0) {
//    if (dep > 6) return false;
    if (j == n) ++i, j = 0;
    if (i == n) {
        return false;
    }
    if (max < k) return false;
    if (max == k) {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) std::cout << (a[i][j] ? 'B' : 'R');
            std::cout << '\n';
        }
        return true;
    }
    int hru1 = 0;
    for (auto [d1, d2]: q) {
        int i1 = i + d1, j1 = j + d2;
        if (i1 != -1 && j1 != -1 && i1 != n && j1 != n) hru1 += a[i][j] != a[i1][j1];
    }
    a[i][j] ^= 1;
    int hru2 = 0;
    for (auto [d1, d2]: q) {
        int i1 = i + d1, j1 = j + d2;
        if (i1 != -1 && j1 != -1 && i1 != n && j1 != n) hru2 += a[i][j] != a[i1][j1];
    }
    a[i][j] ^= 1;
    if (hru2 < hru1) {
        max += hru2 - hru1;
        a[i][j] ^= 1;
        if (ger(i, j + 1, dep + 1)) return true;
        a[i][j] ^= 1;
        max -= hru2 - hru1;
        if (ger(i, j + 1, dep + 1)) return true;
    } else {
        if (ger(i, j + 1, dep + 1)) return true;
        a[i][j] ^= 1;
        max += hru2 - hru1;
        if (ger(i, j + 1, dep + 1)) return true;
        a[i][j] ^= 1;
        max -= hru2 - hru1;
    }
    return false;
}

vc<std::array<int, 3>> x;
bool da[3005 * 3005 * 2];

int cnt = 0;
int sui = 0;

bool gen(int i = 0) {
    if (cnt == k) {
        for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) a[i][j] = 0;
        for (int i = 0; i < x.size(); ++i) if (da[i]) a[x[i][1]][x[i][2]] = 1;
        for (int i = 0; i < n; ++i) {
            std::string s;
            for (int j = 0; j < n; ++j) s.push_back(a[i][j] ? 'R' : 'B');
            std::cout << s << '\n';
        }
        return true;
    }
    if (cnt > k) return false;
    if (i == x.size()) {
        return false;
    }
    da[i] = 1;
    cnt += x[i][0];
    if (gen(i + 1)) return true;
    da[i] = 0;
    cnt -= x[i][0];
    if (gen(i + 1)) return true;
    return false;
}

bool heh(int cnt) {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            a[i][j] = 0;
            if ((i + j) % 2 && cnt) {
                --cnt;
                a[i][j] = 1;
            }
        }
    }
    max = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            max += (j + 1 != n && a[i][j] != a[i][j + 1]) + (i + 1 != n && a[i][j] != a[i + 1][j]);
        }
    }
    return max >= k;
}

int main() {
    std::cin.tie(nullptr)->ios_base::sync_with_stdio(false);
    int t;
    std::cin >> t;
    while (t--) {
        std::cin >> n >> k;
//    for (n = 1; n <= 100; ++n) {
//        for (k = 1; k <= 20; ++k) {
//            std::cout << n << ' ' << k << '\n';
//            n = 4, k = 3;
//        n = 5, k =35;
//        n = 4, k = 20;
        if (n <= 3) {

            int hex = 0;
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j) {
                    a[i][j] = 0;
                    if (max < k && (i + j) % 2) {
                        a[i][j] = 1;
                    }
                    hex += i != n - 1;
                    hex += j != n - 1;
                }
            }
            int lo = -1, hi = n * n + 5;
            while (hi - lo > 1) {
                int mi = (lo + hi) / 2;
                if (heh(mi)) hi = mi;
                else lo = mi;
            }
            hi += 3;
            hi = std::min(hi, n * n / 2);
            heh(hi);
//        std::cout << max << '\n';
            if (k > hex || k == hex - 1 || k == 1) {
                std::cout << "Impossible\n";
//            gen(0, 0);
            } else {
                std::cout << "Possible\n";
                assert(ger(0, 0));
            }
            continue;
        }
        int hex = 0;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                hex += i != n - 1;
                hex += j != n - 1;
                a[i][j] = 0;
            }
        }

        if (k > hex || k == hex - 1 || k == 1) {
            std::cout << "Impossible\n";
//            gen(0, 0);
        } else {
            std::cout << "Possible\n";
            x.clear();
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j) {
                    if ((i + j + 1) % 2) {
                        if (i % (n - 1) == 0 && j % (n - 1) == 0) x.push_back({2, i, j});
                        else if (i % (n - 1) == 0 || j % (n - 1) == 0) x.push_back({3, i, j});
                        else x.push_back({4, i, j});
                    }
                }
            }
            cnt = 0;
            std::sort(x.begin(), x.end());
            std::reverse(x.begin(), x.end());
            vc<int> q(5);
            for (auto [c, i, j]: x) q[c]++;
            for (auto [c, i, j]: x) {
//                    ->5;
                if (c == 3 && q[c] == 1 && (k % 2 == cnt % 2)) continue;
                if (c + cnt <= k && k - (c + cnt) != 1) {
                    a[i][j] = 1;
                    cnt += c;
                    --q[c];
                }
            }
                if (k != cnt) {
                    std::cout << n << ' ' << k << '\n';
                }
            assert(k == cnt);
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j) std::cout << (a[i][j] ? 'B' : 'R');
                std::cout << '\n';
            }
        }
//
//        }
    }

//    }
}


詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 5628kb

input:

2
3 6
3 1

output:

Possible
BRR
RBR
RRR
Impossible

result:

ok correct! (2 test cases)

Test #2:

score: 0
Accepted
time: 26ms
memory: 7972kb

input:

4424
1 0
2 4
2 3
2 2
2 1
2 0
3 12
3 11
3 10
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
3 1
3 0
4 24
4 23
4 22
4 21
4 20
4 19
4 18
4 17
4 16
4 15
4 14
4 13
4 12
4 11
4 10
4 9
4 8
4 7
4 6
4 5
4 4
4 3
4 2
4 1
4 0
5 40
5 39
5 38
5 37
5 36
5 35
5 34
5 33
5 32
5 31
5 30
5 29
5 28
5 27
5 26
5 25
5 24
5 23
5 22
5 21
5...

output:

Possible
R
Possible
RB
BR
Impossible
Possible
BB
BR
Impossible
Possible
RR
RR
Possible
RBR
BRB
RBR
Impossible
Possible
BBR
BRB
RBR
Possible
BRR
BRB
RBR
Possible
BRR
RRB
RBR
Possible
BRR
RRB
BRR
Possible
BRR
RBR
RRR
Possible
BRR
RRR
RBR
Possible
BRR
RRR
BRR
Possible
BRR
BRR
BRR
Possible
BRR
RRR
RRR
I...

result:

ok correct! (4424 test cases)

Test #3:

score: 0
Accepted
time: 79ms
memory: 21940kb

input:

1
1000 0

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (1 test case)

Test #4:

score: 0
Accepted
time: 0ms
memory: 18160kb

input:

1
1000 1

output:

Impossible

result:

ok correct! (1 test case)

Test #5:

score: 0
Accepted
time: 84ms
memory: 25612kb

input:

1
1000 1998000

output:

Possible
BRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRB...

result:

ok correct! (1 test case)

Test #6:

score: 0
Accepted
time: 0ms
memory: 17964kb

input:

1
1000 1997999

output:

Impossible

result:

ok correct! (1 test case)

Test #7:

score: 0
Accepted
time: 84ms
memory: 24884kb

input:

1
1000 1638091

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (1 test case)

Test #8:

score: 0
Accepted
time: 78ms
memory: 24808kb

input:

1
1000 726743

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (1 test case)

Test #9:

score: 0
Accepted
time: 79ms
memory: 24408kb

input:

1
1000 1159802

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (1 test case)

Test #10:

score: 0
Accepted
time: 87ms
memory: 23068kb

input:

1
1000 1824691

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (1 test case)

Test #11:

score: 0
Accepted
time: 88ms
memory: 23048kb

input:

1
1000 1606348

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (1 test case)

Test #12:

score: 0
Accepted
time: 52ms
memory: 5968kb

input:

100
100 3588
100 16278
100 14222
100 3818
100 16278
100 2672
100 7447
100 5705
100 9385
100 19205
100 16362
100 14175
100 327
100 18201
100 3519
100 14923
100 5358
100 17389
100 8773
100 7611
100 2185
100 3314
100 2358
100 18271
100 9499
100 12584
100 8079
100 16954
100 12620
100 16333
100 7148
100 ...

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (100 test cases)

Test #13:

score: 0
Accepted
time: 66ms
memory: 13264kb

input:

10
280 56983
468 47999
111 964
346 192134
60 3108
348 98521
421 57292
24 310
29 1080
484 17366

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRR...

result:

ok correct! (10 test cases)

Test #14:

score: 0
Accepted
time: 59ms
memory: 11100kb

input:

13
44 3612
468 9437
171 34192
174 33316
121 15295
249 1231
84 9464
170 56598
358 183525
369 42656
29 595
226 74474
296 34671

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRR
RRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBR
RBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRR
RRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBR
RBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRBRR
RRBRBRBRBRBRBRBRBRBRB...

result:

ok correct! (13 test cases)

Test #15:

score: 0
Accepted
time: 40ms
memory: 7756kb

input:

792
43 1432
33 1687
39 1872
49 906
41 27
49 1140
41 2730
39 1350
33 1625
26 986
26 1079
29 377
50 2930
24 536
28 874
44 1659
36 46
26 1199
46 1289
50 1662
48 59
20 90
37 2025
40 1971
31 443
31 511
36 1940
29 1515
21 104
24 432
23 337
38 2222
36 1016
24 786
23 737
50 1728
45 2032
22 183
50 416
44 375...

output:

Possible
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRR...

result:

ok correct! (792 test cases)