QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#640945 | #7733. Cool, It’s Yesterday Four Times More | Doubeecat | TL | 976ms | 26692kb | C++20 | 4.2kb | 2024-10-14 17:04:42 | 2024-10-14 17:04:42 |
Judging History
answer
/*
Undo the destiny.
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
#define pii pair<int,int>
#define pll pair<ll,ll>
#define mp make_pair
vector <vector<int> > ma;
vector <vector<int> > vis;
const int dx[4] = {0,0,-1,1};
const int dy[4] = {1,-1,0,0};
int n,m,col;
vector <pii> ps;
map <int,int> sta,viss,rt;
bool valid(int x,int y) {
return x >= 0 && x < n && y >= 0 && y < m;
}
void dfs1(int x,int y) {
ps.push_back(mp(x,y));
vis[x][y] = col;
for (int i = 0;i < 4;++i) {
int nx = x + dx[i],ny = y + dy[i];
if (valid(nx,ny) && !ma[nx][ny]) {
if (!vis[nx][ny]) {
dfs1(nx,ny);
}
}
}
}
int zip(pii x,pii y) {
int a,b,c,d;a = x.first,b = x.second;c = y.first,d = y.second;
return d + c * m + b * n * m + a * m * n * m;
}
pair<pii,pii> unzip(int x) {
pii a,b;
b.second = x % m;
x /= m;
b.first = x % n;
x /= n;
a.second = x % m;
x /= m;
a.first = x;
return mp(a,b);
}
void bfs(int stt) {
queue <int> q;
q.push(stt);
rt[stt] = stt;
while (!q.empty()) {
int nowsta = q.front();q.pop();
pii s = unzip(nowsta).first,t = unzip(nowsta).second;
int xx = s.first,yy = s.second;
int xxx = t.first,yyy = t.second;
//printf("xx(%d,%d)-(%d,%d)\n",xx,yy,xxx,yyy);
bool flag = 0;
for (int i = 0;i < 4;++i){
int nx = xx + dx[i],ny = yy + dy[i];
int nxx = xxx + dx[i],nyy = yyy + dy[i];
//printf("nx(%d,%d)-(%d,%d)\n",nx,ny,nxx,nyy);
if (!valid(nx,ny) || ma[nx][ny]) continue;
if (!valid(nxx,nyy) || ma[nxx][nyy]) {
sta[stt] = sta[nowsta] = 1;
continue ;
}
if (!rt[zip(mp(nx,ny),mp(nxx,nyy))])q.push(zip(mp(nx,ny),mp(nxx,nyy))),rt[zip(mp(nx,ny),mp(nxx,nyy))] = stt;
}
//if (!flag) sta[nowsta] = -1;
}
}
void solve() {
cin >> n >> m;
ma.clear();vis.clear();col = 0;
sta.clear();
ma.resize(n);
vis.resize(n);
rt.clear();
int siz= 0;
for (int i = 0;i < n;++i) {
ma[i].resize(m);
vis[i].resize(m);
for (int j = 0;j < m;++j) {
char c;cin >> c;
if (c == 79) ma[i][j] = 1;
else ma[i][j] = 0,++siz;
}
}
int ans = 0;
//bfs(zip(mp(1,4),mp(1,0)));
//cout << sta[zip(mp(1,4),mp(1,0))] << "\n";
for (int i = 0;i < n;++i) {
for (int j = 0;j < m;++j) {
if (!ma[i][j] && !vis[i][j]) {
ps.clear();
++col;
dfs1(i,j);
/*puts("newbrick");
for (auto p : ps) {
printf("(%d,%d)\n",p.first,p.second);
}*/
//sta.clear();
for (auto p1 : ps) {
int cnt = 0;
for (int xx = 0;xx < n;++xx) {
for (int yy = 0;yy < m;++yy) {
pii p2 = mp(xx,yy);
if (p2 == p1 || ma[xx][yy]) continue;
if (!rt[zip(p1,p2)]) bfs(zip(p1,p2));
if (sta[rt[zip(p1,p2)]]== 1) {
++cnt;
} else {
//cout << p1.first << " " << p1.second << "!" << p2.first << " " << p2.second << "\n";
}
}
}
//cout << p1.first << " " << p1.second << "!" << cnt << "\n";
if (cnt == siz - 1) {
++ans;
//cout << p1.first << " " << p1.second << "!\n";
}
}
}
}
}
cout << ans << "\n";
}
signed main() {
//ios::sync_with_stdio(false);
//cin.tie(0);//cout.tie(0);
int T;cin >> T;
while (T--) solve();
return 0;
}
/*
1
2 5
.OO..
.O.O.
*/
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3528kb
input:
4 2 5 .OO.. O..O. 1 3 O.O 1 3 .O. 2 3 OOO OOO
output:
3 1 0 0
result:
ok 4 lines
Test #2:
score: 0
Accepted
time: 3ms
memory: 3596kb
input:
200 2 4 OOO. OO.. 2 3 OOO .O. 3 3 O.O OOO OO. 4 1 . . O O 1 2 .O 1 1 . 2 5 .OO.. .O.O. 2 1 O O 1 1 O 1 3 .OO 5 1 O O . O . 5 2 O. .. O. .O .. 5 3 ... ... .OO ..O OOO 3 5 ..O.O .O.O. .OO.O 5 2 .O OO O. O. .. 2 1 O O 3 5 .O.OO O...O ..OO. 1 5 ..... 5 1 O . O . . 5 3 OOO OO. .OO OO. O.O 2 1 O . 5 2 O. ...
output:
3 0 0 2 1 1 3 0 0 1 0 7 9 4 4 0 6 5 2 0 1 6 4 5 2 0 0 5 3 3 1 4 1 0 7 5 2 3 7 3 0 6 2 2 2 0 4 6 6 3 3 2 3 5 2 1 0 3 3 4 4 2 2 0 7 6 4 8 5 3 2 5 2 1 2 1 4 0 0 2 5 1 4 6 6 1 6 2 2 3 4 5 2 1 0 1 9 3 4 11 0 3 2 1 0 0 4 3 1 4 3 8 3 0 3 6 2 5 1 3 3 4 0 2 11 2 2 4 0 4 4 6 2 1 2 3 0 5 0 16 4 3 2 6 0 8 3 3 1...
result:
ok 200 lines
Test #3:
score: 0
Accepted
time: 34ms
memory: 3732kb
input:
50 10 9 OOOO.O... O...O.OOO .....O... ..OO..O.O ...O..O.O ..OOO..O. ..OOO...O .OO.O..OO .O.O.OO.. .O..O.O.O 10 10 .O.OOO.OO. ...OOOOOOO ...O.O..O. .O.O..O... .O.O.OO..O ..OO.O..OO O....O..OO OO...OOOOO OO.OO.O..O .O.O.OOOOO 10 8 O..OOO.O O.OOOO.. O..OO.OO OO..OO.. .OOO..O. .OO.OO.O OOO..OO. ..O..OO....
output:
31 40 13 25 40 37 27 29 20 26 25 29 21 29 21 31 32 31 33 34 25 31 18 25 41 28 20 45 20 29 18 21 27 28 35 13 20 17 32 29 28 23 23 23 24 18 28 17 35 24
result:
ok 50 lines
Test #4:
score: 0
Accepted
time: 976ms
memory: 26692kb
input:
5 1 1000 ....O..OO..O..O..OO...OOO.OOOO.O...O....OOOOO.....OO..OOOO.O..O....OOOO..OO..OOOO......O.O.O..O..OO.OO.OO.O....O.O.O.O.O.OO..O.O.OO..O..OO..O.OOO...O...O.O.O..O....O.OO...O..O...O.OOO..OO.O..O.OO.O.O..OOOO..O.OO.O.O....O.OO.......OOOO....O.O.O.O..OOO.O.OO.OOO..O...O.O.O.O.OO.O.OOOO...O.OO.....
output:
7 380 294 373 291
result:
ok 5 lines
Test #5:
score: 0
Accepted
time: 3ms
memory: 3900kb
input:
200 1 1 . 2 5 OOOO. OOOOO 3 2 O. O. OO 3 1 O . O 3 2 .. OO OO 1 5 ...OO 3 5 OOOOO OOOOO OOO.O 4 3 OOO OOO OO. OO. 1 3 O.O 3 1 O . . 1 2 O. 3 3 OOO O.. ... 5 4 O.OO ..OO O.OO OOOO OOOO 2 2 O. OO 3 2 OO OO O. 4 4 OOO. OO.. OO.O ...O 1 4 .OOO 4 3 O.. OOO OOO OOO 4 1 O . . O 3 2 O. OO OO 5 3 OO. OOO OOO...
output:
1 1 2 1 2 3 1 2 1 2 1 5 4 1 1 7 1 2 2 1 1 6 0 1 1 5 1 1 2 1 3 8 1 2 1 3 2 10 4 1 3 1 2 1 1 1 1 1 2 1 1 2 2 4 3 1 2 7 4 1 4 1 1 1 2 1 2 1 7 1 1 1 1 1 3 1 1 2 4 1 4 1 1 1 1 1 1 1 1 1 3 7 1 1 2 5 1 3 7 1 9 2 9 4 4 0 12 6 4 6 2 0 8 6 3 4 16 5 4 5 2 7 1 0 0 1 4 2 9 0 2 3 7 6 13 7 10 11 4 2 13 5 8 8 0 16 ...
result:
ok 200 lines
Test #6:
score: 0
Accepted
time: 42ms
memory: 3948kb
input:
50 7 9 OOOOOOO.. OOOOOOO.. OOO....OO ....OO..O .O...OOOO .....OOOO OO...OOOO 8 8 .OO.O... .O...... OOO.OOOO OO..OOOO ..O.OO.O O...OOOO O..OOOOO O..OOOOO 9 8 OO....OO OO..OOOO O..OOOOO ..O..OOO .....O.. .....O.. OOOOOOOO OOOOOOOO .OOOOOOO 8 10 .O.OOOOOOO ...OO.OOOO ......OOOO O..O....OO O..OOO.O.O O....
output:
22 23 22 35 33 15 21 23 24 16 29 15 29 40 23 30 6 25 37 23 25 33 19 12 34 43 44 21 51 29 35 67 22 53 33 53 32 46 50 48 42 45 31 46 45 30 48 53 54 43
result:
ok 50 lines
Test #7:
score: 0
Accepted
time: 613ms
memory: 18504kb
input:
5 1 1000 OO.OOO....O..OOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOOO..OOOOOOOOOOO....OOOOOOOOOOOO...OO.OOOOOOOOOOOO.OOOOOOO....OOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOO..OOO.O.OO..OO....OOOOOOOOO.OO.OOOOO.OOOOOOO....OOOOOOOO.OOOOO...OOOOOOOOOOOOOOOO.OOOOOOOOOOOOOOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOO..OOOOOOOOOOOOOOOO.....
output:
0 355 363 384 280
result:
ok 5 lines
Test #8:
score: -100
Time Limit Exceeded
input:
5 1 1000 O.O...O................OOOO........OO..........OOOO....OO...O...OO....O...OO...O.............OOOOOO......................OOO......OO..........O...............O........................OO....................O..........O..........OO.......OOOO.O..OO...OOO....O.................................O...
output:
34 458 503