Submission #1156262

#TimeUsernameProblemLanguageResultExecution timeMemory
1156262Ghulam_JunaidRed-blue table (IZhO19_stones)C++20
100 / 100
330 ms3256 KiB
#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n, m;
    cin >> n >> m;
    bool sw = 0;
    if (n < m) sw = 1, swap(n, m);

    vector<vector<char>> output(n), tmp(n);
    for (int i = 0; i < n; i ++)
        output[i].resize(m), tmp[i].resize(m);

    for (int i = 0; i < n; i ++)
        for (int j = 0; j < m; j ++)
            output[i][j] = '+';

    int l = m - (m / 2 + 1) - 1, r = m + 1;
    while (r - l > 1){
        int c = (l + r) / 2;
        set<pair<int, int>> st;
        for (int i = 0; i < c; i ++)
            st.insert({n / 2 + 1, i});
        
        for (int i = 0; i < n; i ++)
            for (int j = 0; j < m; j ++)
                tmp[i][j] = '+';

        for (int i = 0; i < n; i ++){
            vector<pair<int, int>> vec;
            for (int j = 0; j < m - (m / 2 + 1); j ++){
                auto it = st.end();
                it--;
                vec.push_back({(*it).first - 1, (*it).second});
                tmp[i][(*it).second] = '-';
                st.erase(it);
            }
            for (auto x : vec)
                st.insert(x);
        }

        if (st.size() and (*st.rbegin()).first > 0) r = c;
        else{
            l = c;
            output = tmp;
        }
    }

    map<char, char> rev;
    rev['+'] = '-', rev['-'] = '+';

    cout << n + l << endl;
    if (!sw){
        for (int i = 0; i < n; i ++){
            for (int j = 0; j < m; j ++)
                cout << output[i][j];
            cout << endl;
        }
    }
    else{
        for (int i = 0; i < m; i ++){
            for (int j = 0; j < n; j ++)
                cout << rev[output[j][i]];
            cout << endl;
        }
    }
}

int main(){
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...