#include<bits/stdc++.h>
#define taskname "A"
using namespace std;
template<class T>bool maximize(T& a, T b){
if(a < b){
a = b;
return true;
}
return false;
}
int n, m;
namespace sub1{
void solve(){
vector<vector<char>>best;
int opt = 0;
for(int mask = (1 << (n * m)) - 1; mask > -1; mask--){
vector<vector<char>>state(n, vector<char>(m));
int cur_opt = 0;
for(int i = 0, p = 0; i < n; i++){
int cnt = 0;
for(int j = 0; j < m; j++, p++){
cnt += int((state[i][j] = ((1 << p & mask) ? '+' : '-')) == '+');
}
if(cnt > (m >> 1)){
cur_opt++;
}
}
for(int j = 0; j < m; j++){
int cnt = 0;
for(int i = 0; i < n; i++){
cnt += int(state[i][j] == '-');
}
if(cnt > (n >> 1)){
cur_opt++;
}
}
if(maximize(opt, cur_opt)){
best = state;
}
}
cout << opt << "\n";
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << best[i][j];
}
cout << "\n";
}
}
}
namespace sub2{
void solve(){
if(n == 1){
cout << m << "\n" << string(m, '-') << "\n";
}
else if(m == 1){
cout << n << "\n";
for(int i = 0; i < n; i++){
cout << "+\n";
}
}
else if(n == 2){
cout << m << "\n" << string(m, '-') << "\n" << string(m, '-') << "\n";
}
else if(m == 2){
cout << n << "\n";
for(int i = 0; i < n; i++){
cout << "++\n";
}
}
else if(n == 3){
cout << m + 1 << "\n" << string(m, '-') << "\n" << string(m, '-') << " " << string(m, '+') << "\n";
}
else{
cout << n + 1 << "\n";
for(int i = 0; i < n; i++){
cout << "+-+\n";
}
}
}
}
namespace sub3{
void solve(){
if(n == 4){
cout << m + 1 << "\n" << string(m, '-') << "\n" << string(m, '-') << "\n" << string(m, '-') << "\n" << string(m, '+') << "\n";
}
else if(m == 4){
cout << n + 1 << "\n";
for(int i = 0; i < n; i++){
cout << "+++-\n";
}
}
else if(n == 5){
vector<vector<char>>ans(n, vector<char>(m, '-'));
for(int i = 0; i <= (m >> 1); i++){
ans[0][i] = ans[1][m - i - 1] = '+';
}
for(int i = 0; i < m; i++){
if(ans[0][i] != '+' || ans[1][i] != '+'){
ans[2][i] = '+';
}
}
int cnt = m;
for(int i = 0; i < 3; i++){
if(count(ans[i].begin(), ans[i].end(), '+') > (m >> 1)){
cnt++;
}
}
cout << cnt << "\n";
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << ans[i][j];
}
cout << "\n";
}
}
else{
vector<vector<char>>ans(n, vector<char>(m, '+'));
for(int i = 0; i <= (n >> 1); i++){
ans[i][0] = ans[n - i - 1][1] = '-';
}
for(int i = 0; i < n; i++){
if(ans[i][0] != '-' || ans[i][1] != '-'){
ans[i][2] = '-';
}
}
int cnt = n;
for(int j = 0; j < 3; j++){
int cnt_sub = 0;
for(int i = 0; i < n; i++){
cnt_sub += int(ans[i][j] == '-');
}
if(cnt_sub > (n >> 1)){
cnt++;
}
}
cout << cnt << "\n";
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << ans[i][j];
}
cout << "\n";
}
}
}
}
namespace sub456{
void solve(){
vector<vector<char>>ans(n, vector<char>(m, n > m ? '+' : '-'));
if(n > m){
for(int col = 0, cnt = 0, _ = (m - 1) >> 1; _ > 0; _--){
for(int i = 0; i < n; i++){
ans[i][col] = '-';
if(cnt++ == (n >> 1)){
cnt = 0;
col++;
}
}
}
}
else{
for(int row = 0, cnt = 0, _ = (n - 1) >> 1; _ > 0; _--){
for(int j = 0; j < m; j++){
ans[row][j] = '+';
if(cnt++ == (m >> 1)){
cnt = 0;
row++;
}
}
}
}
int opt = 0;
for(int i = 0; i < n; i++){
if(count(ans[i].begin(), ans[i].end(), '+') > (m >> 1)){
opt++;
}
}
for(int j = 0; j < m; j++){
int cnt = 0;
for(int i = 0; i < n; i++){
cnt += int(ans[i][j] == '-');
}
opt += int(cnt > (n >> 1));
}
cout << opt << "\n";
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << ans[i][j];
}
cout << "\n";
}
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
}
int _t;
cin >> _t;
for(int _ = 0; _ < _t; _++){
cin >> n >> m;
if(_t <= 16 && n * m <= 16){
sub1::solve();
}
else if(min(n, m) <= 3){
sub2::solve();
}
else if(min(n, m) <= 5){
sub3::solve();
}
else{
sub456::solve();
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
stones.cpp: In function 'int main()':
stones.cpp:196:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
196 | freopen(taskname".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |