답안 #1090071

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1090071 2024-09-17T16:59:10 Z ivan_alexeev Dango Maker (JOI18_dango_maker) C++17
13 / 100
1 ms 456 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;

#ifdef lisie_bimbi
#else
#define endl '\n'
#endif
typedef long long ll;

const ll inf = 1'000'000'000'000'000'000;

using namespace std;

#pragma GCC optimize("O3")
#pragma GCC target("avx,avx2,bmi2,fma,popcnt")


//#define int long long

int n, m;
vector<vector<int>> z;

bool get(int x, int y, bool f){
    if((x >= 0) && (x < n) && (y >= 0) && (y < m)){

    }else{
        return 0;
    }
    if(f){
        if(x + 2 < n){
            return ((z[x][y] == 0) && (z[x + 1][y] == 1) && (z[x + 2][y] == 2));
        }else{
            return 0;
        }
    }else{
        if(y + 2 < n){
            return ((z[x][y] == 0) && (z[x][y + 1] == 1) && (z[x][y + 2] == 2));
        }else{
            return 0;
        }
    }
}

vector<vector<int>> v;
int kl(int a, int b){
    return a * m + b;
}

vector<int> used;

int lox[2];

void dfs(int u, int type){
    lox[type]++;
    used[u] = 1;
    for(auto i : v[u]){
        if(!used[i]){
            dfs(i, type ^ 1);
        }
    }
}

void solve(){
    cin >> n >> m;
    z.resize(n, vector<int>(m));
    for(int i = 0; i < n; i++){
        string s;
        cin >> s;
        for(int j = 0; j < m; j++){
            if(s[j] == 'R'){
                z[i][j] = 0;
            }else if(s[j] == 'G'){
                z[i][j] = 1;
            }else{
                z[i][j] = 2;
            }
        }
    }
    v.resize(n * m * 2);
    vector<int> h(n * m * 2);
    for(int x = 0; x < n; x++){
        for(int y = 0; y < m; y++){
            if(get(x, y, 1)){
                h[kl(x, y)] = 1;
                for(int k = 0; k < 3; k++){
                    if(get(x + k, y - k, 0)){
                        v[kl(x, y)].push_back(kl(x + k, y - k) + n * m);
                    }
                }
            }
        }
    }
    for(int x = 0; x < n; x++){
        for(int y = 0; y < m; y++){
            if(get(x, y, 0)){
                h[kl(x, y) + n * m] = 1;
                for(int k = 0; k < 3; k++){
                    if(get(x - k, y + k, 1)){
                        v[kl(x, y) + n * m].push_back(kl(x - k, y + k));
                    }
                }
            }
        }
    }
    used.resize(n * m * 2);
    int ans = 0;
    for(int i = 0; i < n * m * 2; i++){
        if(h[i] && !used[i]){
            lox[0] = 0;
            lox[1] = 0;
            dfs(i, 0);
            ans += max(lox[0], lox[1]);
        }
    }
    cout << ans << endl;
}

signed main(){
#ifdef lisie_bimbi
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#else
    cin.tie(nullptr)->sync_with_stdio(false);
#endif
    cout << setprecision(5) << fixed;
    int _ = 1;
    //cin >> t;
    while(_--){
        solve();
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 344 KB Output is correct
9 Correct 0 ms 352 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 344 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 0 ms 456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 344 KB Output is correct
9 Correct 0 ms 352 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 344 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 0 ms 456 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Incorrect 0 ms 348 KB Output isn't correct
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 344 KB Output is correct
9 Correct 0 ms 352 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 344 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 0 ms 456 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Incorrect 0 ms 348 KB Output isn't correct
20 Halted 0 ms 0 KB -