답안 #992894

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
992894 2024-06-05T08:07:00 Z vivkostov Red-blue table (IZhO19_stones) C++14
38 / 100
19 ms 2140 KB
#include<bits/stdc++.h>
#define endl "\n"
using namespace std;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
int t,n,m,h;
char a1,a2;
string s[1005];
void print(int br)
{
    cout<<br<<endl;
    if(h)
    {
        for(int i=1; i<=m; i++)
        {
            for(int j=1; j<=n; j++)
            {
                cout<<s[j][i-1];
            }
            cout<<endl;
        }
        return;
    }
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cout<<s[i][j-1];
        }
        cout<<endl;
    }
}
void fil(int i)
{
    for(int j=1;j<=m;j++)s[i]+=a1;
}
void fila2(int i,int st)
{
    int gr=(((m-1)/2)*n)/(n/2+1);
    if(gr==0)return;
    for(int j=1;j<=(n-1)/2;j++)
    {
        s[i][st-1]=a2;
        st--;
        if(st<m-gr)st=m;
    }
}
void old()
{
    int br=0;
    if(n==m&&m>=5)
    {
        for(int i=1; i<=(n-1)/2; i++)
        {
            for(int j=1; j<=m/2+1; j++)
            {
                s[i]+=a1;
            }
            for(int j=m/2+2; j<=m; j++)
            {
                s[i]+=a2;
            }
            br++;
        }
        for(int i=(n-1)/2+1; i<=n-2; i++)
        {
            for(int j=1; j<=(m-1)/2; j++)
            {
                s[i]+=a2;
            }
            for(int j=(m-1)/2+1; j<=m; j++)
            {
                s[i]+=a1;
            }
            br++;
        }
        for(int i=1; i<=m; i++)
        {
            s[n-1]+=a2;
            s[n]+=a2;
        }
        br+=((m-1)/2)*2;
    }
    //if(false);
    else
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m/2+1; j++)
            {
                s[i]+=a1;
            }
            for(int j=m/2+2; j<=m; j++)
            {
                s[i]+=a2;
            }
            br++;
        }
        br+=(m-1)/2;
    }
    print(br);
}
void resheven()
{
    if(n<=4||m<=4)
    {
        old();
        return;
    }
    int br=n+(((m-1)/2)*n)/(n/2+1),pos=m,gr=(((m-1)/2)*n)/(n/2+1);
    //cout<<(((m-1)/2)*n)/(n/2+1)<<endl;
    for(int i=1;i<=n;i++)
    {
        fil(i);
        fila2(i,pos);
        pos--;
        if(pos<=m-gr)pos=m;
    }
    print(br);
}
void resh()
{
    int br=0;
    for(int i=1; i<=(n-1)/2; i++)
    {
        for(int j=1; j<=m/2+1; j++)
        {
            s[i]+=a1;
        }
        for(int j=m/2+2; j<=m; j++)
        {
            s[i]+=a2;
        }
        br++;
    }
    for(int i=(n-1)/2+1; i<=n-1; i++)
    {
        for(int j=1; j<=(m-1)/2; j++)
        {
            s[i]+=a2;
        }
        for(int j=(m-1)/2+1; j<=m; j++)
        {
            s[i]+=a1;
        }
        br++;
    }
    if(m>2)
    {
        for(int i=1; i<=m; i++)
        {
            s[n]+=a2;
        }
        br+=((m-1)/2)*2;
    }
    else
    {
        for(int i=1; i<=m; i++)
        {
            s[n]+=a1;
        }
        br++;
    }
    print(br);
}
void read()
{
    cin>>t;
    for(int z=1; z<=t; z++)
    {
        cin>>n>>m;
        if(n<m)
        {

            swap(n,m);
            a1='-';
            a2='+';
            h=1;
        }
        else
        {
            a1='+';
            a2='-';
        }
        if(n%2==0)resheven();
        else resh();
        h=0;
        for(int i=1; i<=n; i++)s[i].clear();
    }
}
int main()
{
    speed();
    read();
    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 1 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 1 ms 348 KB Output is correct
4 Incorrect 1 ms 348 KB in the table A+B is not equal to 41
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 1372 KB Output is correct
2 Correct 17 ms 2140 KB Output is correct
3 Correct 17 ms 2140 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 1368 KB in the table A+B is not equal to 44
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Incorrect 1 ms 348 KB in the table A+B is not equal to 41
5 Halted 0 ms 0 KB -