QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#643085#8935. Puzzle: Easy as ScrabbleWolamWA 0ms3648kbC++209.5kb2024-10-15 18:40:432024-10-15 18:40:44

Judging History

你现在查看的是最新测评结果

  • [2024-10-15 18:40:44]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3648kb
  • [2024-10-15 18:40:43]
  • 提交

answer

#include<bits/stdc++.h>
#define endl "\n"
using namespace std;
using ll = long long;
const int maxn = 1e3 + 10;
char D[maxn],U[maxn],L[maxn],R[maxn];
char maze[maxn][maxn];
bool valid=true;
void add(int type,int pos,int dir,int l,int r)//dir[1,4],pos[1,2] type[1,2]
{
    if(dir<=2)//up or down
    {
        if(dir==1)//up
        {
            if(D[pos]=='.')
            {
                return;
            }
            for(int i=r;i>=l;i--)
            {
                if(type==1)//left
                {
                    if(maze[i][pos]==D[pos])
                    {
                        break;
                    }
                    if((L[i]=='.'||L[i]==D[pos])&&(maze[i][pos]=='.'))
                    {
                        maze[i][pos]=D[pos];
                        L[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[i][pos]!='.'&&maze[i][pos]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[i][pos]='x';
                        }
                    }
                }
                else//right
                {
                    if(maze[i][pos]==D[pos])
                    {
                        break;
                    }
                    if((R[i]=='.'||R[i]==D[pos])&&(maze[i][pos]=='.'))
                    {
                        maze[i][pos]=D[pos];
                        R[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[i][pos]!='.'&&maze[i][pos]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[i][pos]='x';
                        }
                    }
                }
            }
        }
        else//down
        {
            if(U[pos]=='.')
            {
                return;
            }
            for(int i=l;i<=r;i++)
            {
                if(type==1)//left
                {
                    if(maze[i][pos]==U[pos])
                    {
                        break;
                    }
                    if((L[i]=='.'||L[i]==U[pos])&&(maze[i][pos]=='.'))
                    {
                        maze[i][pos]=U[pos];
                        L[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[i][pos]!='.'&&maze[i][pos]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[i][pos]='x';
                        }
                    }
                }
                else//right
                {
                    if(maze[i][pos]==U[pos])
                    {
                        break;
                    }
                    if((R[i]=='.'||R[i]==U[pos])&&(maze[i][pos]=='.'))
                    {
                        maze[i][pos]=U[pos];
                        R[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[i][pos]!='.'&&maze[i][pos]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[i][pos]='x';
                        }
                    }
                }
            }
        }
    }
    else//left or right
    {
        if(dir==3)//left
        {
            if(R[pos]=='.')
            {
                return;
            }
            for(int i=r;i>=l;i--)
            {
                if(type==1)//up
                {
                    if(maze[pos][i]==R[pos])
                    {
                        break;
                    }
                    if((U[i]=='.'||U[i]==R[pos])&&(maze[pos][i]=='.'))
                    {
                        maze[pos][i]=R[pos];
                        U[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[pos][i]!='.'&&maze[pos][i]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[pos][i]='x';
                        }
                    }
                }
                else//down
                {
                    if(maze[pos][i]==R[pos])
                    {
                        break;
                    }
                    if((D[i]=='.'||D[i]==R[pos])&&(maze[pos][i]=='.'))
                    {
                        maze[pos][i]=R[pos];
                        D[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[pos][i]!='.'&&maze[pos][i]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[pos][i]='x';
                        }
                    }
                }
            }
        }
        else//right
        {
            if(L[pos]=='.')
            {
                return;
            }
            for(int i=l;i<=r;i++)
            {
                if(type==1)//up
                {
                    if(maze[pos][i]==L[pos])
                    {
                        break;
                    }
                    if((U[i]=='.'||U[i]==L[pos])&&(maze[pos][i]=='.'))
                    {
                        maze[pos][i]=L[pos];
                        U[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[pos][i]!='.'&&maze[pos][i]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[pos][i]='x';
                        }
                    }
                }
                else//down
                {
                    if(maze[pos][i]==L[pos])
                    {
                        break;
                    }
                    if((D[i]=='.'||D[i]==L[pos])&&(maze[pos][i]=='.'))
                    {
                        maze[pos][i]=L[pos];
                        D[i]='.';
                        break;
                    }
                    else
                    {
                        if(maze[pos][i]!='.'&&maze[pos][i]!='x')
                        {
                            valid=false;
                        }
                        else
                        {
                            maze[pos][i]='x';
                        }
                    }
                }
            }
        }
    }
}
void color(int l1,int r1,int l2,int r2)//[r,c]
{
    if(l1>r1||l2>r2)
    {
        return;
    }
    add(1,l1,4,l2,r2);
    add(1,l2,2,l1,r1);
    add(2,r2,2,l1,r1);
    add(1,l1,3,l2,r2);
    add(2,r1,3,l2,r2);
    add(2,r2,1,l1,r1);
    add(1,l2,1,l1,r1);
    add(2,r1,4,l2,r2);
    for(int i=l1+1;i<=r1-1;i++)
    {
        if(L[i]!='.'&&maze[i][l2]=='.')
        {
            maze[i][l2]=L[i];
            L[i]='.';
        }
        if(R[i]!='.'&&maze[i][r2]=='.')
        {
            maze[i][r2]=R[i];
            R[i]='.';
        }
    }
    for(int i=l2+1;i<=r2-1;i++)
    {
        if(U[i]!='.'&&maze[l1][i]=='.')
        {
            maze[l1][i]=U[i];
            U[i]='.';
        }
        if(D[i]!='.'&&maze[r1][i]=='.')
        {
            maze[r1][i]=D[i];
            D[i]='.';
        }
    }
    color(l1+1,r1-1,l2+1,r2-1);
}
void solve(void)
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<=n+1;i++)
    {
        for(int j=0;j<=m+1;j++)
        {
            cin>>maze[i][j];
        }
    }
    for(int i=1;i<=m;i++)
    {
        U[i]=maze[0][i];
        D[i]=maze[n+1][i];
    }
    for(int i=1;i<=n;i++)
    {
        L[i]=maze[i][0];
        R[i]=maze[i][m+1];
    }
    color(1,n,1,m);
    if(valid)
    {
        for(int i=1;i<=n;i++)
        {
            if(L[i]!='.'||R[i]!='.')
            {
                cout<<"NO"<<endl;
                return;
            }
        }
        for(int i=1;i<=m;i++)
        {
            if(U[i]!='.'||D[i]!='.')
            {
                cout<<"NO"<<endl;
                return;
            }
        }
        cout<<"YES"<<endl;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(maze[i][j]=='x'||maze[i][j]=='.')
                {
                    cout<<'.';
                }
                else
                {
                    cout<<maze[i][j];
                }
            }
            cout<<endl;
        }
    }
    else
    {
        cout<<"NO"<<endl;
    }
}
int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    while(t--)
    {
        solve();
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3648kb

input:

5 5
.CBA...
....x..
..x...C
A.....B
B..x..A
C......
.......

output:

NO

result:

wrong answer Jury has answer but participant has not.