제출 #1010705

#제출 시각아이디문제언어결과실행 시간메모리
1010705LucaIlieRed-blue table (IZhO19_stones)C++17
69 / 100
30 ms2128 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 1000; char mat[MAX_N][MAX_N]; int sumL[MAX_N], sumC[MAX_N]; int eval( int n, int m ) { for ( int l = 0; l < n; l++ ) sumL[l] = 0; for ( int c = 0; c < m; c++ ) sumC[c] = 0; for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) { sumL[l] += (mat[l][c] == '+' ? 1 : -1); sumC[c] += (mat[l][c] == '+' ? -1 : +1); } } int r = 0; for ( int l = 0; l < n; l++ ) r += (sumL[l] > 0); for ( int c = 0; c < m; c++ ) r += (sumC[c] > 0); return r; } int solve1( int n, int m ) { for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) { if ( l == n - 1 && m != 1 ) mat[l][c] = '-'; else { if ( l < n / 2 ) { if ( c <= m / 2 ) mat[l][c] = '+'; else mat[l][c] = '-'; } else { if ( c < (m - 1) / 2 ) mat[l][c] = '-'; else mat[l][c] = '+'; } } } } return eval( n, m ); } int solve2( int n, int m ) { for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) { if ( l >= n - 2 && m != 1 ) mat[l][c] = '-'; else { if ( l < (n - 1) / 2 ) { if ( c <= m / 2 ) mat[l][c] = '+'; else mat[l][c] = '-'; } else { if ( c < (m - 1) / 2 ) mat[l][c] = '-'; else mat[l][c] = '+'; } } } } return eval( n, m ); } int solve3( int n, int m ) { for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) { if ( n > m ) { if ( c <= m / 2 ) mat[l][c] = '+'; else mat[l][c] = '-'; } else { if ( l <= n / 2 ) mat[l][c] = '-'; else mat[l][c] = '+'; } } } return eval( n, m ); } int solve4( int n, int m ) { if ( n != 6 || m != 6 ) return 0; for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) { if ( l < 3 ) mat[l][c] = '-'; else if ( l == 3 ) { if ( c < 4 ) mat[l][c] = '+'; else mat[l][c] = '-'; } else if ( l == 4 ) { if ( c < 2 || c >= 4 ) mat[l][c] = '+'; else mat[l][c] = '-'; } else if ( l == 5 ) { if ( c >= 2 ) mat[l][c] = '+'; else mat[l][c] = '-'; } } } return eval( n, m ); } int solve5( int n, int m ) { if ( n != 5 ) return 0; for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) { if ( l < 2 ) mat[l][c] = '-'; else if ( l == 2 ) { if ( c <= (m + 1) / 2 ) mat[l][c] = '+'; else mat[l][c] = '-'; } else if ( l == 3 ) { if ( c < (m + 1) / 2 - 1 || c >= m - 2 ) mat[l][c] = '+'; else mat[l][c] = '-'; } else if ( l == 4 ) { if ( c >= m / 2 - 1 ) mat[l][c] = '+'; else mat[l][c] = '-'; } } } return eval( n, m ); } int solve6( int n, int m ) { if ( m != 5 ) return 0; for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) { if ( c < 2 ) mat[l][c] = '+'; else if ( c == 2 ) { if ( l <= (n + 1) / 2 ) mat[l][c] = '-'; else mat[l][c] = '+'; } else if ( c == 3 ) { if ( l < (n + 1) / 2 - 1 || l >= n - 2 ) mat[l][c] = '-'; else mat[l][c] = '+'; } else if ( c == 4 ) { if ( l >= n / 2 - 1 ) mat[l][c] = '-'; else mat[l][c] = '+'; } } } return eval( n, m ); } int main() { int t; cin >> t; for ( ; t > 0; t-- ) { int n, m; cin >> n >> m; int best = 1, r = solve1( n, m ); if ( solve2( n, m ) > r ) { best = 2; r = solve2( n, m ); } if ( solve3( n, m ) > r ) { best = 3; r = solve3( n, m ); } if ( solve4( n, m ) > r ) { best = 4; r = solve4( n, m ); } if ( solve5( n, m ) > r ) { best = 5; r = solve5( n, m ); } if ( solve6( n, m ) > r ) { best = 6; r = solve6( n, m ); } if ( best == 1 ) solve1( n, m ); if ( best == 2 ) solve2( n, m ); if ( best == 3 ) solve3( n, m ); if ( best == 4 ) solve4( n, m ); if ( best == 5 ) solve5( n, m ); if ( best == 6 ) solve6( n, m ); cout << r << "\n"; for ( int l = 0; l < n; l++ ) { for ( int c = 0; c < m; c++ ) cout << mat[l][c]; cout << "\n"; } } 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...