Submission #939148

# Submission time Handle Problem Language Result Execution time Memory
939148 2024-03-06T06:15:31 Z vjudge1 Dango Maker (JOI18_dango_maker) C++17
13 / 100
115 ms 255980 KB
#include <bits/stdc++.h>  
using namespace std;
#pragma GCC target("avx2")
#pragma GCC optimize("Ofast") 
//#pragma comment(linker, "/stack:200000000") 
#pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native" ) 
#pragma GCC optimize("unroll-loops")
/* 
#pragma GCC optimize("profile-values,profile-reorder-functions,tracer") 
#pragma GCC optimize("vpt") 
#pragma GCC optimize("rename-registers") 
#pragma GCC optimize("move-loop-invariants") 
#pragma GCC optimize("unswitch-loops") 
#pragma GCC optimize("function-sections") 
#pragma GCC optimize("data-sections") 
#pragma GCC optimize("branch-target-load-optimize") 
#pragma GCC optimize("branch-target-load-optimize2") 
#pragma GCC optimize("btr-bb-exclusive") 
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse") 
#pragma GCC optimize("-fgcse-lm") 
#pragma GCC optimize("-fipa-sra") 
#pragma GCC optimize("-ftree-pre") 
#pragma GCC optimize("-ftree-vrp") 
#pragma GCC optimize("-fpeephole2") 
#pragma GCC optimize("-ffast-math") 
#pragma GCC optimize("-fsched-spec") 
#pragma GCC optimize("-falign-jumps") 
#pragma GCC optimize("-falign-loops") 
#pragma GCC optimize("-falign-labels") 
#pragma GCC optimize("-fdevirtualize") 
#pragma GCC optimize("-fcaller-saves") 
#pragma GCC optimize("-fcrossjumping") 
#pragma GCC optimize("-fthread-jumps") 
#pragma GCC optimize("-freorder-blocks") 
#pragma GCC optimize("-fschedule-insns") 
#pragma GCC optimize("inline-functions") 
#pragma GCC optimize("-ftree-tail-merge") 
#pragma GCC optimize("-fschedule-insns2") 
#pragma GCC optimize("-fstrict-aliasing") 
#pragma GCC optimize("-falign-functions") 
#pragma GCC optimize("-fcse-follow-jumps") 
#pragma GCC optimize("-fsched-interblock") 
#pragma GCC optimize("-fpartial-inlining") 
#pragma GCC optimize("no-stack-protector") 
#pragma GCC optimize("-freorder-functions") 
#pragma GCC optimize("-findirect-inlining") 
#pragma GCC optimize("-fhoist-adjacent-loads") 
#pragma GCC optimize("-frerun-cse-after-loop") 
#pragma GCC optimize("inline-small-functions") 
#pragma GCC optimize("-finline-small-functions") 
#pragma GCC optimize("-ftree-switch-conversion") 
#pragma GCC optimize("-foptimize-sibling-calls") 
#pragma GCC optimize("-fexpensive-optimizations") 
#pragma GCC optimize("inline-functions-called-once") 
#pragma GCC optimize("-fdelete-null-pointer-checks")
*/
#define ll long long 
#define all(x) x.begin(),x.end()
#define sz(x) (int) x.size()
#define f first
#define s second
#define ld long double
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
#define pb push_back
#define dauzhan gay
#define popcount __builtin_popcount
const long double Eps = 1e-12; 
const int max1 = 1e9 + 100; 
const int min1 = -1e9 *1.4;
const ll mod1 = 1000000007;
const ll mod2 = 2000000011;
const ll mod3 = 3000000017;
const ll mod = 998244353;
const int N = 2e5 + 100;
const int B = 9000000 + 1;
const ll INF = 1e18 + 100;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ll binpow(ll x,ll y,ll md) {
    if(y < 0) return 0;
    if(y == 0) return 1;        
    if(y == 1) return x;
    if(y % 2 == 0) {
        ll now = binpow(x,y/2,md);
        return (1ll*now*now) % md;
    }
    else {
        ll now = binpow(x,y/2,md);
        return (1ll*((1ll*now*now) % md)*x) % md;
    }
}
/*
for(int i = 1;i <= n;i++) sp[0][i] = a[i];
for(int i = 1;i <= log2(n);i++) {
    for(int l = 1;l <= n;l++) {
        int r = l + (1 << i) - 1;
        if(r > n) break;
        int middle = l + (1 << (i - 1));
        sp[i][l] = max(sp[i - 1][l],sp[i - 1][middle]);
    }
}
int get(int l,int r) {
    int g = log2(r - l + 1);
    return max(sp[g][l],sp[g][r - (1 << g) + 1]);
} 
*/
int matching[B];
bool used[B];
vector <int> reb[B];
bool dfs(int v) {
    if(used[v]) return false;
    used[v] = true;
    for(auto to:reb[v]) {
        if(matching[to] == -1 || dfs(matching[to])) {
            matching[to] = v;
            return true;
        }
    }
    return false;
}
int n,m;

int f(int x,int y) {
    return (x - 1)*m + y;
}
pair <int,int> g(int x) {
    int b = x % m;
    if(b == 0) b = m;
    return {(x - b)/m + 1,b};
}
signed main() {
    ios_base::sync_with_stdio(NULL);
    cin.tie(0);
    cout.tie(0);    
    cin >> n >> m;
    char a[n + 1][m + 1];
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++) {
            cin >> a[i][j];
        }
    }
    //a[i][j] = (i - 1)*m + j;
    memset(matching,-1,sizeof(matching));
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++) {
            if(a[i][j] == 'G') {
                if((i < n&&a[i + 1][j] == 'W') || (j < m&&a[i][j + 1] == 'W')) {
                    if(i > 1&&a[i - 1][j] == 'R') {
                        int x = f(i - 1,j);
                        int y = f(i,j);
                        reb[x].pb(y);
                        reb[y].pb(x);
                    }
                    if(j > 1&&a[i][j - 1] == 'R') {
                        int x = f(i,j - 1);
                        int y = f(i,j);
                        reb[x].pb(y);
                        reb[y].pb(x);
                    }
                }
            }
        }
    }
    for(int i = 1;i <= n*m;i++) {
        memset(used,false,sizeof(used));
        dfs(i);
    }
    bool chose[n + 1][m + 1];
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++) {
            chose[i][j] = false;
        }
    }
    for(int i = 1;i <= n*m;i++) {
        if(matching[i] != -1) {
            int x = i,y = matching[i];
            int x1 = g(x).f,y1 = g(x).s;
            int x2 = g(y).f,y2 = g(y).s;
            if(x1 > n || x1 < 1 || y1 > m || y1 < 1 || x2 > n || x2 < 1) {
                cout << 0 << endl;
                exit(0);
            }
            if(a[x1][y1] == 'G') {
                chose[x1][y1] = true;
            }
            if(a[x2][y2] == 'G') {
                chose[x2][y2] = true;
            }
        }
    }
    int ans = 0;
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++) {
            if(a[i][j] == 'W') {
                if(j > 1&&chose[i][j - 1]) {
                    chose[i][j - 1] = false;
                    ans++;
                }
                else if(i > 1&&chose[i - 1][j]) {
                    chose[i - 1][j] = false;
                    ans++;
                }
            }
        }
    }
    cout << ans << endl;
}

    
    
     
    
    

# Verdict Execution time Memory Grader output
1 Correct 101 ms 255568 KB Output is correct
2 Correct 93 ms 255568 KB Output is correct
3 Correct 93 ms 255588 KB Output is correct
4 Correct 93 ms 255656 KB Output is correct
5 Correct 95 ms 255568 KB Output is correct
6 Correct 95 ms 255812 KB Output is correct
7 Correct 101 ms 255936 KB Output is correct
8 Correct 95 ms 255824 KB Output is correct
9 Correct 96 ms 255824 KB Output is correct
10 Correct 94 ms 255568 KB Output is correct
11 Correct 101 ms 255980 KB Output is correct
12 Correct 99 ms 255600 KB Output is correct
13 Correct 97 ms 255568 KB Output is correct
14 Correct 96 ms 255572 KB Output is correct
15 Correct 99 ms 255688 KB Output is correct
16 Correct 96 ms 255824 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 101 ms 255568 KB Output is correct
2 Correct 93 ms 255568 KB Output is correct
3 Correct 93 ms 255588 KB Output is correct
4 Correct 93 ms 255656 KB Output is correct
5 Correct 95 ms 255568 KB Output is correct
6 Correct 95 ms 255812 KB Output is correct
7 Correct 101 ms 255936 KB Output is correct
8 Correct 95 ms 255824 KB Output is correct
9 Correct 96 ms 255824 KB Output is correct
10 Correct 94 ms 255568 KB Output is correct
11 Correct 101 ms 255980 KB Output is correct
12 Correct 99 ms 255600 KB Output is correct
13 Correct 97 ms 255568 KB Output is correct
14 Correct 96 ms 255572 KB Output is correct
15 Correct 99 ms 255688 KB Output is correct
16 Correct 96 ms 255824 KB Output is correct
17 Correct 115 ms 255644 KB Output is correct
18 Correct 100 ms 255572 KB Output is correct
19 Incorrect 104 ms 255568 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 101 ms 255568 KB Output is correct
2 Correct 93 ms 255568 KB Output is correct
3 Correct 93 ms 255588 KB Output is correct
4 Correct 93 ms 255656 KB Output is correct
5 Correct 95 ms 255568 KB Output is correct
6 Correct 95 ms 255812 KB Output is correct
7 Correct 101 ms 255936 KB Output is correct
8 Correct 95 ms 255824 KB Output is correct
9 Correct 96 ms 255824 KB Output is correct
10 Correct 94 ms 255568 KB Output is correct
11 Correct 101 ms 255980 KB Output is correct
12 Correct 99 ms 255600 KB Output is correct
13 Correct 97 ms 255568 KB Output is correct
14 Correct 96 ms 255572 KB Output is correct
15 Correct 99 ms 255688 KB Output is correct
16 Correct 96 ms 255824 KB Output is correct
17 Correct 115 ms 255644 KB Output is correct
18 Correct 100 ms 255572 KB Output is correct
19 Incorrect 104 ms 255568 KB Output isn't correct
20 Halted 0 ms 0 KB -