QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#168452#5438. Half MixedZhou_JK#ML 1ms3472kbC++232.1kb2023-09-08 15:18:292023-09-08 15:18:29

Judging History

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

  • [2023-09-08 15:18:29]
  • 评测
  • 测评结果:ML
  • 用时:1ms
  • 内存:3472kb
  • [2023-09-08 15:18:29]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
long long way(int x) {
    return 1ll * x * (x + 1) / 2;
}

void solve() {
    auto getv = [&](int x) {
        long long w = way(x) / 2;
        vector<int> lens;
        for (int i = x; i >= 1; i--) {
            if (w >= way(i) + x) {
                lens.push_back(i);
                w -= way(i);
                break;
            }
        }
        // w >= n >= rem
        int rem = x - (lens.empty() ? 0 : lens[0]);
        while (rem < w) {
            bool ok = false;
            for (int j = 10; j >= 2; j--) {
                int ww = way(j);
                if (w - ww >= rem - j) {
                    ok = true;
                    w -= ww;
                    rem -= j;
                    lens.push_back(j);
                    break;
                }
            }
            if (!ok) {
                return vector<int>{};
            }
        }
        while (rem--) {
            lens.push_back(1);
        }
        return lens;
    };
    int n, m;
    cin >> n >> m;
    if (way(n) % 2 == 1 && way(m) % 2 == 1) {
        cout << "No\n";
        return;
    }
    cout << "Yes\n";
    if (way(n) % 2 == 0) {
        auto lens = getv(n);
        if (lens.empty()){
            cout<<"No\n";
            return;
        }
        int p = 0, i = 0;
        vector<int> col(n);
        for (int x : lens) {
            while (x--) col[i++] = p;
            p ^= 1;
        }
        for(int i=0;i<n;i++)for(int j=0;j<m;j++){
            cout<<col[i]<<" \n"[j+1==m];
        }
    } else {
        auto lens = getv(m);
        if (lens.empty()){
            cout<<"No\n";
            return;
        }
        int p = 0, i = 0;
        vector<int> col(m);
        for (int x : lens) {
            while (x--) col[i++] = p;
            p ^= 1;
        }
        for(int i=0;i<n;i++)for(int j=0;j<m;j++){
            cout<<col[j]<<" \n"[j+1==m];
        }
    }
}

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

详细

Test #1:

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

input:

2
2 3
1 1

output:

Yes
0 1 0
0 1 0
No

result:

ok OK, Accepted. (2 test cases)

Test #2:

score: -100
Memory Limit Exceeded

input:

5382
1 1
1 2
2 1
1 3
2 2
3 1
1 4
2 3
3 2
4 1
1 5
2 4
3 3
4 2
5 1
1 6
2 5
3 4
4 3
5 2
6 1
1 7
2 6
3 5
4 4
5 3
6 2
7 1
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
1 11
2 10
3 9
4 8
5 7
6 6
7 5
8 4
9 3
10 2
11 1
1 12
2 11
3 10
4 9
5 8
6 ...

output:


result: