QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#672558#7733. Cool, It’s Yesterday Four Times Morewangxiaorui#WA 0ms9192kbC++203.4kb2024-10-24 17:27:122024-10-24 17:27:12

Judging History

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

  • [2024-10-24 17:27:12]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:9192kb
  • [2024-10-24 17:27:12]
  • 提交

answer

#include<bits/stdc++.h>
#define pos(x,y) ((x-1)*m+y)
#define fail(x,y) (x<1||y<1||x>n||y>m||a[x][y]=='O')
using namespace std;

const int X[]={1,0,-1,0};
const int Y[]={0,1,0,-1};
char a[1005][1005],vis[1005][1005];
vector<pair<int,int>>v;
int n,m,f[1005][1005],ans;

// void dfs(int xa,int ya,int xb,int yb)
// {
//     int p1=pos(xa,ya),p2=pos(xb,yb);
//     // cerr<<xa<<' '<<ya<<' '<<xb<<' '<<yb<<':'<<p1<<' '<<p2<<' '<<f[p1][p2]<<endl;
//     if(f[p1][p2]||vis[p1][p2]) return;
//     vis[p1][p2]=1;
//     v.push_back({p1,p2});
//     for(int i=0;i<4;i++)
//     {
//         int px=xa+X[i],py=ya+Y[i],qx=xb+X[i],qy=yb+Y[i];
//         int f1=fail(px,py),f2=fail(qx,qy);
//         if(f1) continue;
//         if(f2)
//         {
//             f[p1][p2]=1;
//             continue;
//         }
//         // cerr<<px<<' '<<py<<' '<<qx<<' '<<qy<<endl;
//         // if(!vis[pos(px,py)][pos(qx,qy)]) 
//         dfs(px,py,qx,qy);
//         f[p1][p2]|=f[pos(px,py)][pos(qx,qy)];
//     }
// }

void bfs(int sxa,int sya,int sxb,int syb)
{
    queue<pair<pair<int,int>,pair<int,int>>>q;
    q.push({{sxa,sya},{sxb,syb}});
    while(!q.empty())
    {
        int xa=q.front().first.first,ya=q.front().first.second;
        int xb=q.front().second.first,yb=q.front().second.second;
        q.pop();
        for(int i=0;i<4;i++)
        {
            int xc=xa+X[i],yc=ya+Y[i],xd=xb+X[i],yd=yb+Y[i];
            int px=pos(xc,yc),py=pos(xd,yd);
            if(fail(xc,yc)||fail(xd,yd)||f[px][py]) continue;
            f[px][py]=1;
            q.push({{xc,yc},{xd,yd}});
        }
    }
}

void sol()
{
    cin>>n>>m;
    // n=1,m=1000;
    memset(f,0,sizeof(f));
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
            // a[i][j]='.';
        }
    }
    ans=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]=='O') continue;
            for(int k=0;k<=n+1;k++)
            {
                for(int l=0;l<=m+1;l++)
                {
                    if(fail(k,l)) bfs(i,j,k,l);
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            int t=1;
            for(int k=1;k<=n;k++)
            {
                for(int l=1;l<=m;l++)
                {
                    if(fail(k,l)||i==k&&j==l) continue;
                    t&=f[pos(i,j)][pos(k,l)];
                }
            }
            ans+=t;
        }
    }
    // for(int i=1;i<=n;i++)
    // {
    //     for(int j=1;j<=m;j++)
    //     {
    //         int res=1;
    //         if(a[i][j]=='O') continue;
    //         v.clear();
    //         for(int k=1;k<=n;k++)
    //         {
    //             for(int l=1;l<=m;l++)
    //             {
    //                 if(a[k][l]=='O'||i==k&&j==l) continue;
    //                 dfs(i,j,k,l);
    //                 res&=f[pos(i,j)][pos(k,l)];
    //                 // cerr<<i<<','<<j<<' '<<k<<','<<l<<' '<<f[pos(i,j)][pos(k,l)]<<endl;
    //             }
    //         }
    //         for(auto k:v) vis[k.first][k.second]=0;
    //         ans+=res;
    //     }
    // }
    cout<<ans<<endl;
}

int main()
{
    ios::sync_with_stdio(0);
    int t;
    cin>>t;
    while(t--) sol();
    return 0;
}

详细

Test #1:

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

input:

4
2 5
.OO..
O..O.
1 3
O.O
1 3
.O.
2 3
OOO
OOO

output:

3
1
0
6

result:

wrong answer 4th lines differ - expected: '0', found: '6'