제출 #992748

#제출 시각아이디문제언어결과실행 시간메모리
992748NValchanovRed-blue table (IZhO19_stones)C++17
28 / 100
2080 ms1368 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; const int MAXN = 1e3 + 10; int n, m; bool table[MAXN][MAXN]; bool ans_table[MAXN][MAXN]; int ans; void read() { cin >> n >> m; } void check() { int a = 0; for(int i = 1; i <= n; i++) { int cntr = 0; int cntb = 0; for(int j = 1; j <= m; j++) { cntr += (table[i][j]); cntb += (!table[i][j]); } assert(cntr + cntb == m); if(cntr > cntb) a++; } int b = 0; for(int j = 1; j <= m; j++) { int cntr = 0; int cntb = 0; for(int i = 1; i <= n; i++) { cntr += (table[i][j]); cntb += (!table[i][j]); } assert(cntr + cntb == n); if(cntb > cntr) b++; } if(ans < a + b) { ans = a + b; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { ans_table[i][j] = table[i][j]; } } } } void bruteforce(int row, int col) { if(row == n + 1 && col == 1) { check(); return; } ///cout << "State : " << row << " : " << col << endl; table[row][col] = false; if(col == m) bruteforce(row + 1, 1); else bruteforce(row, col + 1); table[row][col] = true; if(col == m) bruteforce(row + 1, 1); else bruteforce(row, col + 1); } void solve_odd() { int rows = n - 1; int cols = m - 1; if(rows + cols < n) { cout << n << endl; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cout << "+"; } cout << endl; } } else if(rows + cols < m) { cout << m << endl; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cout << "-"; } cout << endl; } } else { cout << rows + cols << endl; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(i < rows && j < cols) { if((i + j) % 2 == 0) { cout << "-"; } else { cout << "+"; } } else if(i < rows) { cout << "+"; } else { cout << "-"; } } cout << endl; } } } void print() { cout << ans << endl; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cout << (ans_table[i][j] ? '+' : '-'); } cout << endl; } } int main() { // #ifdef ONLINE_JUDGE // freopen(".in", "r", stdin); // freopen(".out", "w", stdout); // #endif ios_base :: sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t; cin >> t; while(t--) { read(); if(n % 2 == 1 && m % 2 == 1) { solve_odd(); } else { ans = 0; bruteforce(1, 1); print(); } } 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...