Submission #499884

#TimeUsernameProblemLanguageResultExecution timeMemory
499884lukameladzeRed-blue table (IZhO19_stones)C++14
100 / 100
67 ms5168 KiB
# include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
using namespace std;
const int N = 1005;
int t,n,m,a[N][N],ans,rem,cur[N],canrow,val,val1,all;
signed main() {
    cin>>t;
    while (t--) {
        cin>>n>>m;
        ans = max(n,m);
        for (int i = 1; i <= n; i++) {
            all = i*((m+2)/2);
            canrow = min(n - (n+2)/2, i);
            for (int j = 0; j < m; j++) {
                if ((m-j)*canrow >= all) {
                    if (i + (m - j) > ans) {
                        val = i;
                        val1 = j;
                    }
                    ans = max(ans,i + (m - j));
                }
                all -= i;
            }
        }
        cout<<ans<<endl;
        //cout<<val<<" "<<val1<<endl;
        if (ans == m) {
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <=m ;j++) {
                    cout<<"-";
                }
                cout<<"\n";
            }
            continue;
        }
        if (ans == n) {
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= m; j++) {
                    cout<<"+";
                }
                cout<<"\n";
            }
            
            continue;
        }
        for (int i = 1; i <= val; i++) {
            canrow = min(n-(n+2)/2,i);
            for (int j = 1; j <= val1; j++) {
                a[i][j] = 1;
            }
            rem = (m+2)/2-val1;
           // if (i == 1) cout<<rem<<endl;
            vector < pair <int, int > > v;
            v.clear();
            for (int j = val1 + 1; j <= m; j++) {
                v.pb({cur[j],j});
            }
            sort(v.begin(),v.end());
            
            for (int j = 0; j < rem; j++) {
                a[i][v[j].s] = 1;
                cur[v[j].s]++;
            }
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {cur[j] = 0;
                if (a[i][j] == 1) cout<<"+";
                else cout<<"-";
                a[i][j] = 0;
            }
            cout<<"\n";
        }
    }
}
#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...