Submission #421114

# Submission time Handle Problem Language Result Execution time Memory
421114 2021-06-08T18:13:01 Z inwbear Furniture (JOI20_furniture) C++14
0 / 100
3 ms 1100 KB
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target ("sse4")
using namespace std;
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define MEM(x,a) memset((x),a,sizeof((x)))
#define F first
#define S second
#define imx INT_MAX
const long long MOD = (long long)(1e9+7);
const long long MMX = (long long)(1e18);
typedef long long LL;
typedef pair<int,int> pii;
int n,m,q,xi,xj,co[1005][1005][2],k,fur[1005][1005],mi,cp[1005][1005][2];
bool cc;
queue<pair<int,int> >qq;
int main()
{
    // freopen("in.txt","r",stdin);
    // freopen("out.txt","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&fur[i][j]);
        }
    }
    co[1][1][0]=1;
    co[n][m][1]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(fur[i][j]==1||co[i][j][0]==0)continue;
            if(fur[i+1][j]==0)co[i+1][j][0]++;
            if(fur[i][j+1]==0)co[i][j+1][0]++;
        }
    }
    for(int i=n;i>0;i--)
    {
        for(int j=m;j>0;j--)
        {
            if(fur[i][j]==1||co[i][j][1]==0)continue;
            if(fur[i-1][j]==0)co[i-1][j][1]++;
            if(fur[i][j-1]==0)co[i][j-1][1]++;
        }
    }
    scanf("%d",&q);
    while(q--)
    {
        cc=false;
        scanf("%d %d",&xi,&xj);
        //for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cp[i][j][0]=0,cp[i][j][1]=0;
        // cp[1][1][0]=1;
        // cp[n][m][1]=1;
        // for(int i=1;i<=n;i++)
        // {
        //     for(int j=1;j<=m;j++)
        //     {
        //         if(fur[i][j]==1||cp[i][j][0]==0)continue;
        //         if(fur[i+1][j]==0)cp[i+1][j][0]++;
        //         if(fur[i][j+1]==0)cp[i][j+1][0]++;
        //     }
        // }
        // for(int i=n;i>0;i--)
        // {
        //     for(int j=m;j>0;j--)
        //     {
        //         if(fur[i][j]==1||cp[i][j][1]==0)continue;
        //         if(fur[i-1][j]==0)cp[i-1][j][1]++;
        //         if(fur[i][j-1]==0)cp[i][j-1][1]++;
        //     }
        // }
        // printf("-------------------\n");
        // for(int i=1;i<=n;i++)
        // {
        //     for(int j=1;j<=m;j++)
        //     {
        //         //if(co[i][j][0]!=cp[i][j][0])printf("%d %d\n",i,j);
        //         //if(co[i][j][1]!=cp[i][j][1])printf("%d %d\n",i,j);
        //         printf("[%d %d %d %d] ",co[i][j][0],cp[i][j][0],co[i][j][1],cp[i][j][1]);
        //     }
        //     printf("\n");
        // }
        mi=1;
        for(int i=xi-1;i>0;i--)
        {
            if(fur[i][xj]==1)mi=0;
            if(co[i][xj][0]>0&&co[i][xj][1]-mi>0)
            {
                cc=true;
                break;
            }
        }
        // mi=1;
        // if(!cc)
        // for(int j=xj-1;j>0;j--)
        // {
        //     if(fur[xi][j]==1)mi=0;
        //     if(co[xi][j][0]>0&&co[xi][j][1]-mi>0)
        //     {
        //         cc=true;
        //         break;
        //     }
        // }
        mi=1;
        if(!cc)
        for(int i=xi+1;i<=n;i++)
        {
            if(fur[i][xj]==1)mi=0;
            if(co[i][xj][0]-mi>0&&co[i][xj][1]>0)
            {
                cc=true;
                break;
            }
        }
        // mi=1;
        // if(!cc)
        // for(int j=xj+1;j<=m;j++)
        // {
        //     if(fur[xi][j]==1)mi=0;
        //     if(co[xi][j][0]-mi>0&&co[xi][j][1]>0)
        //     {
        //         cc=true;
        //         break;
        //     }
        // }
        if(cc)
        {
            printf("1\n");
            fur[xi][xj]=1;
            if(co[xi][xj][0]>0)
            {
                co[xi][xj][0]=0;
                qq.push({xi,xj});
                while(!qq.empty())
                {
                    if(qq.front().F+1<=n)
                    {
                        co[qq.front().F+1][qq.front().S][0]--;
                        if(co[qq.front().F+1][qq.front().S][0]==0)
                        {
                            qq.push({qq.front().F+1,qq.front().S});
                        }
                    }
                    if(qq.front().S+1<=m)
                    {
                        co[qq.front().F][qq.front().S+1][0]--;
                        if(co[qq.front().F][qq.front().S+1][0]==0)
                        {
                            qq.push({qq.front().F,qq.front().S+1});
                        }
                    }
                    qq.pop();
                }
            }
            if(co[xi][xj][1]>0)
            {
                co[xi][xj][1]=0;
                qq.push({xi,xj});
                while(!qq.empty())
                {
                    if(qq.front().F-1>0)
                    {
                        co[qq.front().F-1][qq.front().S][1]--;
                        if(co[qq.front().F-1][qq.front().S][1]==0)
                        {
                            qq.push({qq.front().F-1,qq.front().S});
                        }
                    }
                    if(qq.front().S-1>0)
                    {
                        co[qq.front().F][qq.front().S-1][1]--;
                        if(co[qq.front().F][qq.front().S-1][1]==0)
                        {
                            qq.push({qq.front().F,qq.front().S-1});
                        }
                    }
                    qq.pop();
                }
            }
        }
        else printf("0\n");
    }
}

Compilation message

furniture.cpp: In function 'int main()':
furniture.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |     scanf("%d %d",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~
furniture.cpp:27:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   27 |             scanf("%d",&fur[i][j]);
      |             ~~~~~^~~~~~~~~~~~~~~~~
furniture.cpp:50:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |     scanf("%d",&q);
      |     ~~~~~^~~~~~~~~
furniture.cpp:54:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   54 |         scanf("%d %d",&xi,&xj);
      |         ~~~~~^~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 844 KB Output is correct
2 Incorrect 3 ms 1100 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 844 KB Output is correct
2 Incorrect 3 ms 1100 KB Output isn't correct
3 Halted 0 ms 0 KB -