QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#693930#5438. Half Mixedxzin#WA 171ms13440kbC++142.5kb2024-10-31 16:58:512024-10-31 16:58:52

Judging History

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

  • [2024-10-31 16:58:52]
  • 评测
  • 测评结果:WA
  • 用时:171ms
  • 内存:13440kb
  • [2024-10-31 16:58:51]
  • 提交

answer

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int N = 3e6 + 50;
ll f[N];

void init() {
    f[1] = 0;
    for (int i = 2; i <= 1000000; ++i) {
        f[i] = i * 1ll * (i - 1) / 2;
        // cout << f[i] << " ";
    }
}

void work() {
    ll n, m; cin >> n >> m;
    if (n == 1 && m == 3) {
        cout << "Yes\n";
        cout << "0 1 0\n"; return;
    } else if (m == 1 && n == 3) {
        cout << "Yes\n";
        cout << "0\n1\n0\n"; return;
    } else if (n == 2 && m == 3) {
        cout << "Yes\n";
        cout << "0 1 1\n1 1 0\n"; return;
    }  else if (m == 2 && n == 3) {
        cout << "Yes\n";
        cout << "1 0\n1 1\n0 1\n"; return;
    } else if (m == 3 && n == 3) {
        cout << "1 0 1\n";
        cout << "1 0 1\n";
        cout << "1 0 1\n";return;
    } else if (m <= 3 && n <= 3) {
        cout << "No\n"; return;
    }
    int flag = 0;
    if (m >= 4 && m % 4 == 0 || (m - 3) % 4 == 0) flag = 0;
    else if (n >= 4 && n % 4 == 0 || (n - 3) % 4 == 0) swap(n, m), flag = 1;
    else {
        cout << "No\n"; return;
    }
    ll mx = m * (m - 3) / 4;
    vector<int> ans;
    int nw = m;
    while (nw) {
        if (f[nw] > mx) {nw--; continue;}
        ans.pb(nw);
        mx -= f[nw];
        if (mx == 0) break;
    }
    ll res = accumulate(ans.begin(), ans.end(), 0);
    if (res > m) {
        cout << "No\n"; return;
    }
    cout << "Yes\n";
    if (flag) {
        nw = 1;
        for (auto x: ans) {
            for (int j = 1; j <= x; ++j){
                for (int i = 1; i <= n; ++i){
                    cout << nw << " ";
                }
                cout << '\n';
            }
            nw ^= 1;
        }
        for (int j = res + 1; j <= m; ++j){
            for (int i = 1; i <= n; ++i){
                cout << nw << " ";
            }
            cout << '\n'; nw ^= 1;
        }
    } else {
        for (int i = 1; i <= n; ++i) {
            nw = 1;
            for (auto x: ans) {
                for (int j = 1; j <= x; ++j){
                    cout << nw << " ";
                }
                nw ^= 1;
            }
            for (int j = res + 1; j <= m; ++j){
                cout << nw << " "; nw ^= 1;
            }
            cout << '\n';
        }
    }
}

int main() {
    int t; cin >> t;
    init();
    while (t--) {
        work();
    }
    // system("pause");
    return 0;
}

详细

Test #1:

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

input:

2
2 3
1 1

output:

Yes
0 1 1
1 1 0
No

result:

ok OK, Accepted. (2 test cases)

Test #2:

score: -100
Wrong Answer
time: 171ms
memory: 13440kb

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:

No
No
No
Yes
0 1 0
No
Yes
0
1
0
Yes
1 1 0 1 
Yes
0 1 1
1 1 0
Yes
1 0
1 1
0 1
Yes
1 
1 
0 
1 
No
Yes
1 1 0 1 
1 1 0 1 
1 0 1
1 0 1
1 0 1
Yes
1 1 
1 1 
0 0 
1 1 
No
No
No
Yes
1 1 0 1 
1 1 0 1 
1 1 0 1 
Yes
1 0 1 
1 0 1 
1 0 1 
1 0 1 
No
No
Yes
1 1 1 1 0 0 1 
No
Yes
1 1 1 1 1 
0 0 0 0 0 
1 1 1 1 1 
Yes...

result:

wrong answer Token "1" doesn't correspond to pattern "Yes|No" (test case 13)