Submission #151911

# Submission time Handle Problem Language Result Execution time Memory
151911 2019-09-05T13:50:46 Z phillip Tetris (COCI17_tetris) C++14
80 / 80
4 ms 376 KB
#include <bits/stdc++.h>

using namespace std;
char g[20][20];
bool vis[20][20];
int f[5],n,m;
bool isc(int x,int y)
{
    char c=g[x][y];
    for(int i=x;i<x+4;i++)
    {
        if(g[i][y]!=c)break;
        if(i==x+3)
        {
            f[1]++;
            for(int i=x;i<x+4;i++)vis[i][y]=1;
            return true;
        }
    }
    for(int i=y;i<y+4;i++)
    {
        if(g[x][i]!=c)break;
        if(i==y+3)
        {
            f[1]++;
            for(int i=y;i<y+4;i++)vis[x][i]=1;
            return true;
        }
    }
    return false;
}
bool issq(int x,int y)
{
    char c=g[x][y];
    if(g[x+1][y]==c&&g[x][y+1]==c&&g[x+1][y+1]==c)
    {
        f[0]++;
        vis[x][y]=1;vis[x+1][y]=1;vis[x][y+1]=1;vis[x+1][y+1]=1;
        return true;
    }
    return false;
}
bool issh(int x,int y)
{
    char c=g[x][y];
    if(g[x+1][y-1]==c&&g[x][y+1]==c)
    {
        f[2]++;
     //   cout<<"issh";
        return true;
    }
    return false;
}
queue<pair<int,int> >q;
int main()
{
    for(int i=0;i<20;i++)
    {
        for(int j=0;j<20;j++)g[i][j]='.';
    }
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>g[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(g[i][j]=='.')continue;
            if(vis[i][j])continue;
            /*for(int i=0;i<5;i++)
            {
                cout<<f[i]<<" ";
            }
            cout<<"\n";*/
            //cout<<i<<" "<<j<<"\n";
            if(isc(i,j))continue;
            if(issq(i,j))continue;
            char c=g[i][j];
            q.push({i,j});
            int x,y;
            bool o=0;
            int smd=0,smc=0;
            while(!q.empty())
            {
                x=q.front().first;y=q.front().second;
                q.pop();
                if(vis[x][y])continue;
                vis[x][y]=1;
                int num=0;
                if(g[x+1][y]==c)q.push({x+1,y}),num++;
                if(g[x+1][y]==c&&vis[x+1][y]==0)smd++;

                if(g[x-1][y]==c)q.push({x-1,y}),num++;
                if(g[x-1][y]==c&&vis[x-1][y]==0)smd--;

                if(g[x][y+1]==c)q.push({x,y+1}),num++;
                if(g[x][y+1]==c&&vis[x][y+1]==0)smc++;

                if(g[x][y-1]==c)q.push({x,y-1}),num++;
                if(g[x][y-1]==c&&vis[x][y-1]==0)smc--;
                if(num==3)
                {
                    o=1;
                }
            }
            if(o)
            {
                f[4]++;
                continue;
            }
            if(smd==2&&smc==1)
            {
       //         cout<<"clean";
                f[2]++;
                continue;
            }
            if(issh(i,j))continue;
            f[3]++;
        }
    }
    for(int i=0;i<5;i++)
    {
        cout<<f[i]<<"\n";
    }
}
/*
3 3
aa.
.aa
...*/
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 4 ms 376 KB Output is correct
8 Correct 2 ms 256 KB Output is correct
9 Correct 2 ms 252 KB Output is correct
10 Correct 2 ms 376 KB Output is correct