QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#508293 | #7733. Cool, It’s Yesterday Four Times More | Godwang | WA | 1ms | 5756kb | C++14 | 4.5kb | 2024-08-07 13:13:09 | 2024-08-07 13:13:09 |
Judging History
answer
#include <iostream>
using namespace std;
#include <set>
#include <algorithm>
#include <cmath>
#include <map>
#include <cstdio>
#include <string>
#include <cstring>
#include <string.h>
#include <stdlib.h>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <stack>
#include <queue>
#include <ctype.h>
#include <vector>
#include <random>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define per(i, a, n) for (int i = n; i >= a; i--)
#define pii pair<int, int>
#define pli pair<ll, int>
#define pil pair<int, ll>
#define endl '\n'
const double pai = acos(-1);
ll extend_gcd(ll a, ll b, ll &x, ll &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
ll d = extend_gcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
ll fastpow(ll a, ll n, ll mod)
{
ll ans = 1;
a %= mod;
while (n)
{
if (n & 1)
ans = (ans * a)%mod; //% mod
a = (a * a)%mod; //% mod
n >>= 1;
}
return ans;
}
int dir[4][2] =
{
{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; // d a w s
const double inf = 1000000000000000000;
const ll mod = 1e9 + 7, P1 = 13331;
const double eps = 1e-7;
const int N = 5e3 + 10, M = 3e7 + 10;
int t,hang,lie;
bool flag[M];
int vis[M];
string s[N];
int get(int hang1,int lie1,int hang2,int lie2)
{
return hang1*(lie+1)*(hang+1)*(lie+1)+lie1*(hang+1)*(lie+1)+hang2*(lie+1)+lie2;
}
void unget(int u,int &hang1,int &lie1,int &hang2,int &lie2)
{
lie2=u%(lie+1);
u/=(lie+1);
hang2=u%(hang+1);
u/=hang+1;
lie1=u%(lie+1);
u/=(lie+1);
hang1=u;
}
bool out(int hangg,int liee)
{
if(hangg<=0||hangg>hang||liee<=0||liee>lie||s[hangg][liee]=='O')
{
return 1;
}
return 0;
}
void bfs(int zhi)
{
vis[zhi]=zhi;
queue<int > q;
q.push(zhi);
while (q.size())
{
int u=q.front();
q.pop();
int hang1,lie1,hang2,lie2;
unget(u,hang1,lie1,hang2,lie2);
rep(i,0,3)
{
int x1=hang1+dir[i][0],y1=lie1+dir[i][1];
int x2=hang2+dir[i][0],y2=lie2+dir[i][1];
int temp=get(x1,y1,x2,y2);
if(vis[temp])
{
continue;
}
vis[temp]=zhi;
if(out(x1,y1))//自己进坑了
{
continue;
}
if(out(x2,y2))//对手进坑了
{
flag[vis[u]]=1;
continue;
}
q.push(temp);
}
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//freopen("ain.txt", "r", stdin);freopen("aout.txt", "w", stdout);
cin>>t;
while(t--)
{
cin>>hang>>lie;
rep(i,0,(hang+1)*(lie+1)*(hang+1)*(lie+1))
{
vis[i]=flag[i]=0;
}
rep(i,1,hang)
{
cin>>s[i];
s[i]=' '+s[i];
}
int ans=0;
rep(i,1,hang)
{
rep(j,1,lie)
{
if(s[i][j]=='.')
{
bool flagg=1;
rep(ii,1,hang)
{
rep(jj,1,lie)
{
if(i==ii&&j==jj||s[ii][jj]=='O')
{
continue;
}
int zhi=get(i,j,ii,jj);
if(vis[zhi]==0)//这个状态前面没有遇到过,那就处理一下
{
bfs(zhi);
}
//处理完这个状态,来判断这个状态能不能战胜
int temp=vis[zhi];
if(flag[ temp ]==0)//这种状态不能战胜
{
flagg=0;
goto ttt;
}
}
}
ttt:
if(flagg)
{
ans++;
}
}
}
}
cout<<ans<<endl;
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 5756kb
input:
4 2 5 .OO.. O..O. 1 3 O.O 1 3 .O. 2 3 OOO OOO
output:
2 1 0 0
result:
wrong answer 1st lines differ - expected: '3', found: '2'