답안 #488842

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
488842 2021-11-20T15:36:19 Z Mihai7218 Red-blue table (IZhO19_stones) C++14
11 / 100
42 ms 1256 KB
#include <iostream>
using namespace std;
int t, n, m, mop, nop;
int main()
{
    cin >> t;
    for (int tc = 1; tc <= t; tc++)
    {
        cin >> n >> m;
        if (n > m)
        {
            if (n % 2 == 0 && n/2+m/2>2)
            {
            cout << max(max(n+ (m/2)-1+(m%2), (m+n-4+m%2+n%2)), n+m/2+m%2) << '\n';
            if (n+ (m/2)-1+(m%2) >= (m+n-4+m%2+n%2) && n+ (m/2)-1+(m%2) >= n+m/2+m%2)
            {
                mop = (m/2)-1+(m%2);
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop-j >= 0)
                        {
                            cout << '-';
                        }
                        else cout << '+';
                    }
                    cout << '\n';
                }
            }
            else if (n+m/2+m%2>(m+n-4+m%2+n%2) && n%2 == 0)
            {
                mop = m/2+m%2;
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop-j >= 0)
                        {
                            if (j%mop == i%mop)
                                cout << '+';
                            else
                                cout << '-';
                        }
                        else
                            cout << '+';
                    }
                    cout << '\n';
                }
            }
            else
            {
                mop = n-2+n%2;
                nop = m-2+m%2;
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop - i >= 0)
                        {
                            if (i % 2 == 0)
                            {
                                if ((m/2+1) - j >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                            if (i % 2 == 1)
                            {
                                if (j - (m/2+1) + (1-m%2) >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                        }
                            else cout << '-';
                    }
                    cout << '\n';
                }
            }
            }
            else
            {
                cout << max(n+ (m/2)-1+(m%2), (m+n-4+m%2+n%2)) << '\n';
            if (n+ (m/2)-1+(m%2) >= (m+n-4+m%2+n%2))
            {
                mop = (m/2)-1+(m%2);
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop-j >= 0)
                        {
                            cout << '-';
                        }
                        else cout << '+';
                    }
                    cout << '\n';
                }
            }
            else
            {
                mop = n-2+n%2;
                nop = m-2+m%2;
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop - i >= 0)
                        {
                            if (i % 2 == 0)
                            {
                                if ((m/2+1) - j >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                            if (i % 2 == 1)
                            {
                                if (j - (m/2+1) + (1-m%2) >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                        }
                            else cout << '-';
                    }
                    cout << '\n';
                }
            }
            }
        }
        else
        {
            if (m%2 == 0 && n/2+m/2>2)
            {
            cout << max(max(m + (n/2)-1+(n%2), (m+n-4+m%2+n%2)), m+n/2+n%2) << '\n';
            if ( m + (n/2)-1+(n%2) >= (m+n-4+m%2+n%2) && m + (n/2)-1+(n%2) >= m+n/2+n%2)
            {
                mop = (n/2)-1+(n%2);
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop-i >= 0)
                        {
                            cout << '+';
                        }
                        else cout << '-';
                    }
                    cout << '\n';
                }
            }
            else if (m+n/2+n%2>(m+n-4+m%2+n%2) && m%2==0)
            {
                mop = n/2+n%2;
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop-i >= 0)
                        {
                            if (j%mop == i%mop)
                                cout << '-';
                            else
                                cout << '+';
                        }
                        else
                            cout << '-';
                    }
                    cout << '\n';
                }
            }
            else
            {
                mop = n-2+n%2;
                nop = m-2+m%2;
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop - i >= 0)
                        {
                            if (i % 2 == 0)
                            {
                                if ((m/2+1) - j >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                            if (i % 2 == 1)
                            {
                                if (j - (m/2+1) + (1-m%2) >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                        }
                            else cout << '-';
                    }
                    cout << '\n';
                }
            }
            }
            else
            {
                cout << max(m + (n/2)-1+(n%2), (m+n-4+m%2+n%2)) << '\n';
            if ( m + (n/2)-1+(n%2) >= (m+n-4+m%2+n%2))
            {
                mop = (n/2)-1+(n%2);
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop-i >= 0)
                        {
                            cout << '+';
                        }
                        else cout << '-';
                    }
                    cout << '\n';
                }
            }
            else
            {
                mop = n-2+n%2;
                nop = m-2+m%2;
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        if (mop - i >= 0)
                        {
                            if (i % 2 == 0)
                            {
                                if ((m/2+1) - j >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                            if (i % 2 == 1)
                            {
                                if (j - (m/2+1) + (1-m%2) >= 0)
                                {
                                    cout << '+';
                                }
                                else cout << '-';
                            }
                        }
                            else cout << '-';
                    }
                    cout << '\n';
                }
            }
            }
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Incorrect 0 ms 204 KB in the table A+B is not equal to 5
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 204 KB in the table A+B is not equal to 21
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Incorrect 0 ms 204 KB in the table A+B is not equal to 5
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 1232 KB Output is correct
2 Correct 26 ms 1100 KB Output is correct
3 Correct 24 ms 1112 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 42 ms 1256 KB in the table A+B is not equal to 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Incorrect 0 ms 204 KB in the table A+B is not equal to 5