This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define pb push_back // kak push_back 5
#define endl '\n'
#define FOR(i,start,end) for(int i = start;i < end;i ++)
const ll mxn = 1e6;
ll n,m,a[mxn];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
ll tt = 1;
cin >> tt;
while(tt --){
ll n,m;
cin >> n >> m;
if(m == 8){
cout << n + 5 << endl;
for(int i = 0;i < n;i ++){
cout << "+++";
if(i % 5 == 0) cout << "++---" << endl;
else if(i % 5 == 1) cout << "--++-" << endl;
else if(i % 5 == 2) cout << "+---+" << endl;
else if(i % 5 == 3) cout << "-++--" << endl;
else if(i % 5 == 4) cout << "---++" << endl;
}
continue;
}
else if(n == 8){
char a[n][m];
for(int j = 0;j < m;j ++){
if(j % 5 == 0) a[3][j] = a[4][j] = '-',a[5][j] = a[6][j] = a[7][j] = '+';
else if(j % 5 == 1) a[5][j] = a[6][j] = '-',a[3][j]=a[4][j]=a[7][j]='+';
else if(j % 5 == 2) a[7][j]=a[3][j] = '-',a[4][j]=a[5][j]=a[6][j]='+';
else if(j % 5 == 3) a[4][j]=a[5][j] = '-',a[3][j]=a[6][j]=a[7][j]='+';
else a[6][j]=a[7][j]='-',a[3][j]=a[4][j]=a[5][j]='+';
}
cout << m + 5 << endl;
for(int i = 0;i < n;i ++){
if(i < 3){
for(int j = 0;j < m;j ++){
cout << '-';
}
cout << endl;
continue;
}
for(int j = 0;j < m;j ++) cout << a[i][j];
cout << endl;
}
continue;
}
if(n == 6 && m == 6){
cout << n + m / 2 << endl;
for(int i = 0;i < n;i ++){
for(int j = 0;j < m;j ++){
if(i < m / 2) cout << '-';
else{
if(j == (i - m / 2) * 2 || j == (i - m / 2) * 2 + 1) cout << '-';
else cout << '+';
}
}
cout << endl;
}
continue;
}
if(n >= m){
if(n == 1){
cout << 1 << endl << '+' << endl;
continue;
}
if(m == 1){
cout << n << endl;
for(int i = 0;i < n;i ++) cout << '+' << endl;
continue;
}
if(m % 2 == 0 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 2) || m % 2 == 1 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 1) || m % 2 == 0 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= (m - 2) + (n - 2) || m % 2 == 1 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= m - 1 + n - 2){
if(m == 5) {
cout << n + 3 << endl;
for(int i = 0;i < n;i ++){
cout << "++";
if(i % 3 == 0) cout << "+--";
else if(i % 3 == 1) cout << "-+-";
else cout << "--+";
cout << endl;
}
continue;
}
else cout << n + (m - 2) / 2 + (m - 2) % 2 << endl;
for(int i = 0;i < n;i ++){
cout<<'+';
for(int j = 1;j < m - 1;j ++){
if(j % 2 == 1) cout << '-';
else cout << '+';
}
cout << '+' << endl;
}
}
else{
if(n % 2 == 1){
if(m % 2 == 1){
cout << (n - 1) + (m - 1) << endl;
for(int i = 0;i < n;i ++){
if(i == n - 1){
for(int j = 0;j < m;j ++){
cout << '-';
}
cout << endl;
continue;
}
cout << '+';
for(int j = 1;j < m;j ++){
if(i % 2 == 0){
if(j % 2 == 1) cout << '-';
else cout << '+';
}
else{
if(j % 2 == 1) cout << '+';
else cout << '-';
}
}
cout << endl;
}
}
else{
cout << (n - 1) + (m - 2) << endl;
for(int i = 0;i < n;i ++){
if(i == n - 1){
for(int j = 0;j < m;j ++){
cout << '-';
}
cout << endl;
continue;
}
cout << '+';
for(int j = 1;j < m - 1;j ++){
if(i % 2 == 0){
if(j % 2 == 1) cout << '-';
else cout << '+';
}
else{
if(j % 2 == 1) cout << '+';
else cout << '-';
}
}
cout << '+' << endl;
}
}
}
else{
if(m % 2 == 1){
cout << n - 2 + m - 1 << endl;
for(int i = 0;i < n;i ++){
if(i == n - 1 || i == 0){
for(int j = 0;j < m;j ++){
cout << '-';
}
cout << endl;
continue;
}
cout << '+';
for(int j = 1;j < m;j ++){
if(i % 2 == 0){
if(j % 2 == 1) cout << '-';
else cout << '+';
}
else{
if(j % 2 == 1) cout << '+';
else cout << '-';
}
}
cout << endl;
}
}
else{
cout << n - 2 + m - 2 << endl;
for(int i = 0;i < n;i ++){
if(i == 0 || i == n - 1){
for(int j = 0;j < m;j ++) cout << '-';
cout << endl;
continue;
}
cout << '+';
for(int j = 1;j < m - 1;j ++){
if(i % 2 == 0){
if(j % 2 == 1) cout << '-';
else cout << '+';
}
else{
if(j % 2 == 1) cout << '+';
else cout << '-';
}
}
cout << '+' << endl;
}
}
}
}
}
else{
if(m == 1){
cout << 1 << endl << '-' << endl;
continue;
}
if(n == 1){
cout << m << endl;
for(int i = 0;i < m;i ++) cout << '-';
cout << endl;
continue;
}
if(n % 2 == 0 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 2) || n % 2 == 1 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 1) || n % 2 == 0 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= (n - 2) + (m - 2) || n % 2 == 1 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= n - 1 + m - 2){
if(n == 5){
cout << m + 3 << endl;
for(int i = 0;i < n;i ++){
if(i == 0 || i == 1){
for(int j = 0;j < m;j ++){
cout << '-';
}
cout << endl;
continue;
}
if(i == 3) { cout << '+'; m--;}
else if(i == 4) { cout << "++";m --;}
for(int j = 0;j < m;j ++){
if(j % 3 == 0) cout << '-';
else cout << '+';
}
cout << endl;
}
continue;
}
cout << m + (n - 2) / 2 + (n - 2) % 2 << endl;
for(int i = 0;i < n;i ++){
for(int j = 0;j < m;j ++){
if(i == 0 || i == n - 1){
cout << '-';
}
else if(i % 2 == 1) cout << '+';
else cout << '-';
}
cout << endl;
}
}
else{
if(m % 2 == 1){
if(n % 2 == 1){
cout << m - 1 + n - 1 << endl;
for(int i = 0;i < n;i ++){
if(i == 0){
for(int j = 0;j < m - 1;j ++) cout << '-';
cout << '+' << endl;
continue;
}
for(int j = 0;j < m - 1;j ++){
if(i % 2 == 1){
if(j % 2 == 0) cout << '+';
else cout << '-';
}
else{
if(j % 2 == 0) cout << '-';
else cout << '+';
}
}
cout << '+' << endl;
}
}
else{
cout << m - 1 + n - 2 << endl;
for(int i = 0;i < n;i ++){
if(i == 0 || i == n - 1){
for(int j = 0;j < m - 1;j ++) cout << '-';
cout << '+' << endl;
continue;
}
for(int j = 0;j < m - 1;j ++){
if(i % 2 == 1){
if(j % 2 == 0) cout << '+';
else cout << '-';
}
else{
if(j % 2 == 0) cout << '-';
else cout << '+';
}
}
cout << '+' << endl;
}
}
}
else{
if(n % 2 == 1){
cout << m - 2 + n - 1 << endl;
for(int i = 0;i < n;i ++){
if(i == 0){
cout << '+';
for(int j = 1;j < m - 1;j ++) cout << '-';
cout << '+' << endl;
continue;
}
cout << '+';
for(int j = 1;j < m - 1;j ++){
if(i % 2 == 1){
if(j % 2 == 0) cout << '+';
else cout << '-';
}
else{
if(j % 2 == 0) cout << '-';
else cout << '+';
}
}
cout << '+' << endl;
}
}
else{
cout << m - 2 + n - 2 << endl;
for(int i = 0;i < n;i ++){
if(i == 0 || i == n - 1){
cout << '+';
for(int j = 1;j < m - 1;j ++) cout << '-';
cout << '+' << endl;
continue;
}
cout << '+';
for(int j = 1;j < m - 1;j ++){
if(i % 2 == 1){
if(j % 2 == 0) cout << '+';
else cout << '-';
}
else{
if(j % 2 == 0) cout << '-';
else cout << '+';
}
}
cout << '+' << endl;
}
}
}
}
}
}
}
Compilation message (stderr)
stones.cpp: In function 'int main()':
stones.cpp:77:41: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
77 | if(m % 2 == 0 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 2) || m % 2 == 1 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 1) || m % 2 == 0 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= (m - 2) + (n - 2) || m % 2 == 1 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= m - 1 + n - 2){
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:77:209: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
77 | if(m % 2 == 0 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 2) || m % 2 == 1 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 1) || m % 2 == 0 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= (m - 2) + (n - 2) || m % 2 == 1 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= m - 1 + n - 2){
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:77:293: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
77 | if(m % 2 == 0 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 2) || m % 2 == 1 && n % 2 == 1 && (n + (m - 2) / 2 + (m - 2) % 2) >= (n - 1) + (m - 1) || m % 2 == 0 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= (m - 2) + (n - 2) || m % 2 == 1 && n % 2 == 0 && (n + (m - 2) / 2 + (m - 2) % 2) >= m - 1 + n - 2){
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:211:41: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
211 | if(n % 2 == 0 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 2) || n % 2 == 1 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 1) || n % 2 == 0 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= (n - 2) + (m - 2) || n % 2 == 1 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= n - 1 + m - 2){
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:211:209: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
211 | if(n % 2 == 0 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 2) || n % 2 == 1 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 1) || n % 2 == 0 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= (n - 2) + (m - 2) || n % 2 == 1 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= n - 1 + m - 2){
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:211:293: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
211 | if(n % 2 == 0 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 2) || n % 2 == 1 && m % 2 == 1 && (m + (n - 2) / 2 + (n - 2) % 2) >= (m - 1) + (n - 1) || n % 2 == 0 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= (n - 2) + (m - 2) || n % 2 == 1 && m % 2 == 0 && (m + (n - 2) / 2 + (n - 2) % 2) >= n - 1 + m - 2){
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |