Submission #992942

# Submission time Handle Problem Language Result Execution time Memory
992942 2024-06-05T08:28:32 Z simona1230 Red-blue table (IZhO19_stones) C++17
0 / 100
2000 ms 9456 KB
#include <bits/stdc++.h>

using namespace std;

void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

int n,m;
int ans[1024][1024];
int curr[1024][1024];

struct row
{
    int x,l;
    row(){}
    row(int _x,int _l)
    {
        x=_x;
        l=_l;
    }

    bool operator<(const row&r)const
    {
        return r.l<l;
    }
};

void solve()
{
    cin>>n>>m;

    int rn=m/2+1;
    int cn=n/2+1;
    //cout<<rn<<" "<<cn<<endl;
    int ans_=0;
    for(int a=0;a<=n;a++)
    {
        priority_queue<row> q;
        for(int i=1;i<=a;i++)
            if(rn-m!=0)q.push({i,rn-m});
        for(int i=a+1;i<=n;i++)
            q.push({i,-m});

        int extra=cn-(n-a);
        int lf=n-extra;


        int b=0;
        if(n-a>=cn)
        {
            b=m;
        }
        else
        {
            int ans=m/2;
            if(2*n-cn-a>=cn)
            {
                if(m%2==0)ans+=m/2-1;
                else ans+=m/2;
            }
            b=ans;
        }
        //cout<<a<<" "<<b<<endl;
        for(int j=1;j<=m;j++)
        {
            vector<row> v;
            bool pos=1;
            for(int k=1;k<=cn;k++)
            {
                if(q.size()==0)
                {
                    pos=0;
                    break;
                }
                //cout<<j<<" "<<q.top().x<<endl;
                row t=q.top();
                q.pop();
                t.l++;
                curr[t.x][j]=1;
                if(t.l!=0)v.push_back(t);
            }
            for(int k=0;k<v.size();k++)
                q.push(v[k]);
        }
        ans_=max(ans_,a+b);
        //cout<<a+b<<" "<<a<<" "<<b<<endl;
        if(ans_==a+b)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    ans[i][j]=curr[i][j];
                }
            }
        }

        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                curr[i][j]=0;
            }
        }
    }
    cout<<ans_<<endl;

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(ans[i][j]==0)cout<<"+";
            else cout<<"-";
        cout<<endl;
    }

    memset(ans,0,sizeof(ans));
}

int main()
{
    speed();
    int t;
    cin>>t;
    while(t--)
        solve();
    return 0;
}

Compilation message

stones.cpp: In function 'void solve()':
stones.cpp:86:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<row, std::allocator<row> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |             for(int k=0;k<v.size();k++)
      |                         ~^~~~~~~~~
stones.cpp:71:18: warning: variable 'pos' set but not used [-Wunused-but-set-variable]
   71 |             bool pos=1;
      |                  ^~~
stones.cpp:49:13: warning: unused variable 'lf' [-Wunused-variable]
   49 |         int lf=n-extra;
      |             ^~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 6236 KB Output is correct
2 Incorrect 3 ms 6236 KB in the table A+B is not equal to 4
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 41 ms 8536 KB in the table A+B is not equal to 21
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 6236 KB Output is correct
2 Incorrect 3 ms 6236 KB in the table A+B is not equal to 4
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 804 ms 9456 KB Output is correct
2 Execution timed out 2078 ms 7516 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1126 ms 9436 KB in the table A+B is not equal to 45
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 6236 KB Output is correct
2 Incorrect 3 ms 6236 KB in the table A+B is not equal to 4
3 Halted 0 ms 0 KB -