QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#335515#7733. Cool, It’s Yesterday Four Times Moreucup-team1055#TL 366ms5644kbC++203.7kb2024-02-23 15:20:212024-02-23 15:20:21

Judging History

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

  • [2024-02-23 15:20:21]
  • 评测
  • 测评结果:TL
  • 用时:366ms
  • 内存:5644kb
  • [2024-02-23 15:20:21]
  • 提交

answer

#include <bits/stdc++.h>

#define rep(i,s,n) for(int i = int(s); i < int(n); i++)
#define rrep(i,s,n) for(int i = int(n) - 1; i >= int(s); i--)
#define all(v) (v).begin(), (v).end()

using ll = long long;
using ull = unsigned long long;
using ld = long double;

bool chmin(auto &a, auto b) {
    if(a <= b) return false;
    a = b;
    return true;
}

bool chmax(auto &a, auto b) {
    if(a >= b) return false;
    a = b;
    return true;
}

using namespace std;

typedef bitset<1010000> B; 

void solve(){
    int n, m; cin >> n >> m;
    vector c(n + 2, vector<char>(m + 2, 'O'));
    rep(i,0,n)rep(j,0,m)cin>>c[i + 1][j + 1];
    n += 2;
    m += 2;

    vector tansaku(n, vector<bool>(m));
    vector belong(n, vector<int>(m, - 1));
    vector<int> siz;
    vector<B> memo;
    int cnt = 0;
    int all_cnt = 0;
    auto valid = [&](int i, int j) -> bool {
        return c[i][j] == '.';
    };

    rep(si,0,n){
        rep(sj,0,m){
            if(valid(si,sj) && !tansaku[si][sj]){
                tansaku[si][sj] = 1;
                vector<pair<int,int>> mada;
                vector<pair<int,int>> mita;
                int tmp_siz = 0;
                mada.push_back(pair(si,sj));
                while(!mada.empty()){
                    auto [i, j] = mada.back();
                    mada.pop_back();
                    tmp_siz++;
                    mita.push_back(pair(i, j));
                    for (auto[x,y]:{
                        pair(i+1,j),pair(i-1,j),pair(i,j+1),pair(i,j-1)
                    }){
                        if(valid(x,y) && !tansaku[x][y]){
                            tansaku[x][y] = 1;
                            mada.push_back(pair(x, y));
                        }
                    }
                }
                all_cnt++;
                if (tmp_siz > 1){
                    B tmp;
                    for (auto[i,j]: mita){
                        tmp[i*m+j] = 1;
                        belong[i][j] = cnt;
                    }
                    memo.emplace_back(tmp);
                    siz.push_back(tmp_siz);
                    cnt++;
                }
            }
        }
    }

    // CORNER CASE
    if (cnt == 0){
        if (all_cnt == 0){
            cout << 0 << '\n';
        }else if(all_cnt == 1){
            cout << 1 << '\n';
        }else{
            cout << 0 << '\n';
        }
        return;
    }

    int ans = 0;
    rep(i,0,n){
        rep(j,0,m){
            if (belong[i][j] == -1) continue;
            int a = belong[i][j];
            bool mode = 1;
            rep(x,0,n){
                rep(y,0,m){
                    if (x == i && y == j) continue;
                    if (belong[x][y] == -1) continue;
                    if (belong[i][j] == belong[x][y]) continue;
                    int idou = (x * m + y) - (i * m + j);
                    int b = belong[x][y];
                    if (idou >= 0){
                        if ((memo[b]|(memo[a]<<idou))==memo[b]){
                            mode = 0;
                            break;
                        }
                    }else{
                        if ((memo[b]|(memo[a]>>(-idou)))==memo[b]){
                            mode = 0;
                            break;
                        }
                    }
                }
                if (!mode){
                    break;
                }
            }
            if (mode){
                ans++;
            }
        }
    }

    cout << ans << '\n';
}

int main() {
    std::cin.tie(nullptr);
    std::ios::sync_with_stdio(false);

    int t; cin >> t;
    while(t--) solve();
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 4184kb

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: 14ms
memory: 4740kb

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: 366ms
memory: 5644kb

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: -100
Time Limit Exceeded

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:


result: