#include<bits/stdc++.h>
#define el '\n'
using namespace std ;
int dx[4] = {1 , 0 , -1 , 0};
int dy[4] = {0 , -1 , 0 , 1};
int n , m;
namespace sub_trau{
bool valid_input(){
return n <= 4 && m <= 4;
}
int x[50][50] , ans = 0 , cnt = 0;
vector<vector<int>> out;
void backtrack(int i , int j , int c){
x[i][j] = c;
cnt++;
for ( int dir = 0 ; dir < 4 ; dir++ ){
int new_i = i + dx[dir];
int new_j = j + dy[dir];
if (new_i <= n && new_j <= m && new_i >= 1 && new_j >= 1 && x[new_i][new_j] == -1){
backtrack(new_i , new_j , 1);
backtrack(new_i , new_j , 0);
}
}
if (cnt == n * m){
int col = 0 , row = 0;
for ( int u = 1 ; u <= n ; u++ ){
int red = 0 , blue = 0;
for ( int v = 1 ; v <= m ; v++ ){
if (x[u][v]) red++;
else blue++;
}
if (red > blue) row++;
}
for ( int v = 1 ; v <= m ; v++ ){
int red = 0 , blue = 0;
for ( int u = 1 ; u <= n ; u++ ){
if (x[u][v]) red++;
else blue++;
}
if (blue > red) col++;
}
if (col + row > ans){
ans = col + row;
out.clear();
for ( int u = 1 ; u <= n ; u++ ){
vector<int> cur;
for ( int v = 1 ; v <= m ; v++ ) cur.push_back(x[u][v]);
out.push_back(cur);
}
}
}
x[i][j] = -1;
cnt--;
}
void solve(){
memset(x , -1 , sizeof(x));
cnt = 0;
ans = 0;
out.clear();
backtrack(1 , 1 , 0);
backtrack(1 , 1 , 1);
cout << ans << el;
for ( auto x : out ){
for ( auto lmao : x ) cout << (lmao ? '+' : '-');
cout << el;
}
}
}
namespace sub_test{
void solve(){
// bool dir = false;
if (n < m){
// dir = true;
// swap(n , m);
vector<vector<char>> ans(n + 5 , vector<char> (m + 5));
int need = n / 2 + 1;
for ( int i = 1 ; i <= min(need , n) ; i++ ){
for ( int j = 1 ; j <= m ; j++ ) ans[i][j] = '-';
}
for ( int i = min(need + 1 , n) ; i <= n ; i++ ){
for ( int j = 1 ; j <= m ; j++ ) ans[i][j] = '+';
}
cout << m + max(0 , n - need) << el;
for ( int i = 1 ; i <= n ; i++ ){
for ( int j = 1 ; j <= m ; j++ ) cout << ans[i][j];
cout << el;
}
}
else {
vector<vector<char>> ans(n + 5 , vector<char> (m + 5));
int need = m / 2 + 1;
for ( int i = 1 ; i <= n ; i++ ){
for ( int j = 1 ; j <= min(m , need) ; j++ ) ans[i][j] = '+';
}
for ( int i = 1 ; i <= n ; i++ ){
for ( int j = min(need + 1 , m) ; j <= m ; j++ ) ans[i][j] = '-';
}
cout << n + max(0 , m - need) << el;
for ( int i = 1 ; i <= n ; i++ ){
for ( int j = 1 ; j <= m ; j++ ) cout << ans[i][j];
cout << el;
}
}
}
}
signed main (){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while(t--){
cin >> n >> m;
if (sub_trau::valid_input()){
sub_trau::solve();
continue;
}
sub_test::solve();
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
514 ms |
440 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
19 ms |
344 KB |
in the table A+B is not equal to 20 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
514 ms |
440 KB |
Output is correct |
3 |
Incorrect |
19 ms |
344 KB |
in the table A+B is not equal to 20 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
26 ms |
1372 KB |
Wrong answer in test 97 21: 107 < 116 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
516 ms |
1284 KB |
Wrong answer in test 24 24: 35 < 44 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
514 ms |
440 KB |
Output is correct |
3 |
Incorrect |
19 ms |
344 KB |
in the table A+B is not equal to 20 |
4 |
Halted |
0 ms |
0 KB |
- |