Submission #900518

#TimeUsernameProblemLanguageResultExecution timeMemory
900518marcidRed-blue table (IZhO19_stones)C++17
27 / 100
17 ms1244 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define vi vector<int>
#define ii pair<int,int>
#define vii vector<ii>
#define vb vector<bool>
#define pb push_back
#define eb emplace_back
const int maxn = 1e6+5;
const int sq = 23;
const int inf = 1e18;

void solve() {
    int n, m; cin >> n >> m;
    // n, m <= 1000 -> n*m=1e6
    // + is red, - is blue
    // A - number of rows with cnt(+)>cnt(-)
    // B - number of cols with cnt(-)>cnt(+)
    // hypo: 
    // if we have optimal field, if we rotate it by 90 degrees and replace '+'s & '-'s, it remains optimal 
    // that means, ans[n][m]<->ans[m][n]
    // + in a row >=n/2+1 and - in a col >=m/2+1
    if (n+m==3) {cout << (n==1?"2\n--\n":"2\n+\n+\n"); return;}
    if (n==1 or n==2) {
        cout << m << '\n';
        for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) cout << '-'; cout << '\n';}
        return;
    } if (m==1 or m==2) {
        cout << n << '\n';
        for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) cout << '+'; cout << '\n';}
        return;
    } int row = m/2+1, col = n/2+1;
    if (n==m) {
        cout << n+(n-1)/2 << '\n';
        if (n&1) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    cout << (j&1?'-':'+');
                } cout << '\n';
            }
        } else {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    cout << (j<n-1?(j&1?'-':'+'):'+');
                } cout << '\n';
            }
        }
        return;
    }
    if (n==3) {
        cout << m+1 << '\n';
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < m; j++) {
                cout << '-';
            } cout << '\n';
        } for (int i = 0; i < m; i++) cout << '+';
        cout << '\n';
        return;
    } if (m==3) {
        cout << n+1 << '\n';
        for (int i = 0; i < n; i++) {
            cout << "++-\n";
        }
        return;
    }
}

signed main() {
    cin.tie()->sync_with_stdio(0);
    int tc = 1;
    cin >> tc;
    while (tc--) {
        solve();
    }
}

Compilation message (stderr)

stones.cpp: In function 'void solve()':
stones.cpp:35:11: warning: unused variable 'row' [-Wunused-variable]
   35 |     } int row = m/2+1, col = n/2+1;
      |           ^~~
stones.cpp:35:24: warning: unused variable 'col' [-Wunused-variable]
   35 |     } int row = m/2+1, col = n/2+1;
      |                        ^~~
#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...