#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000;
char mat[MAX_N][MAX_N], aux[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 ) {
bool inverted = false;
if ( n > m ) {
swap( n, m );
inverted = true;
}
int specialLines = n / 2 + 1;
for ( int l = 0; l < n; l++ ) {
for ( int c = 0; c < m; c++ ) {
if ( l >= specialLines )
mat[l][c] = '-';
else if ( l == 0 ) {
if ( c < m / 2 + 1 )
mat[l][c] = '+';
else
mat[l][c] = '-';
}
else if ( l <= specialLines / 2 ) {
if ( c < (m + 1) / 2 - 1 || c == (m + 1) / 2 + l * 2 || c == (m + 1) / 2 + l * 2 + 1 )
mat[l][c] = '+';
else
mat[l][c] = '-';
}
else {
if ( c >= m / 2 - 1 )
mat[l][c] = '+';
else
mat[l][c] = '-';
}
}
}
if ( inverted ) {
for ( int l = 0; l < n; l++ ) {
for ( int c = 0; c < m; c++ )
aux[c][l] = mat[l][c];
}
swap( n, m );
for ( int l = 0; l < n; l++ ) {
for ( int c = 0; c < m; c++ )
mat[l][c] = (aux[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 ( 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 );
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;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
2 ms |
348 KB |
Output is correct |
4 |
Incorrect |
5 ms |
348 KB |
Wrong answer in test 6 5: 8 < 9 |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
59 ms |
1500 KB |
Output is correct |
2 |
Correct |
26 ms |
2676 KB |
Output is correct |
3 |
Correct |
23 ms |
2900 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
1368 KB |
Output is correct |
2 |
Correct |
21 ms |
1884 KB |
Output is correct |
3 |
Correct |
20 ms |
1624 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
2 ms |
348 KB |
Output is correct |
4 |
Incorrect |
5 ms |
348 KB |
Wrong answer in test 6 5: 8 < 9 |
5 |
Halted |
0 ms |
0 KB |
- |