Submission #50475571


Source Code Expand

// Source: https://usaco.guide/general/io

#include <algorithm>
#include <bits/stdc++.h>
#include <climits>
#include <iterator>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef long double ld;
typedef pair<ll, ll> pll;
#define FOR(i, a, b) for(int i = a; i < b; i++)
#define ROF(i, a, b) for(int i = a; i >= b; i--)
#define ms memset
#define pb push_back
#define fi first
#define se second
#define inp(n, a) vector<ll> a;for(int i=0;i<n;i++){ll now;cin>>now;a.pb(now);}
#define all(a) a.begin(),a.end()
#define show(a) for(long long loppls=0;loppls<(long long)(a.size()-1);loppls++)cout<<a[loppls]<<' ';cout<<a[a.size()-1];

#ifdef reimufumo
#define owo(x) std::cerr << x;
#define ovo(a) for(long long loppls=0;loppls<(long long)(a.size()-1);loppls++)cerr<<a[loppls]<<' ';cerr<<a[a.size()-1];
#define ouo(a,x) for(long long loppls=0;loppls<x-1;loppls++)cerr<<a[loppls]<<'\t';cerr<<a[x-1];
#define dbg(x) std::cerr << #x << " = " << (x) << " (L" << __LINE__ << ") " << __FILE__ << std::endl
#define dbgif(cond, x) ((cond) ? std::cerr << #x << " = " << (x) << " (L" << __LINE__ << ") " << __FILE__ << std::endl : std::cerr)
#else
#define owo(x) ((void)0)
#define ovo(a) ((void)0)
#define ouo(a,x) ((void)0)
#define dbg(x) ((void)0)
#define dbgif(cond, x) ((void)0)
#endif

long long binpow(long long a, long long b, long long m) {
    a %= m;
    long long res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a % m;
        a = a * a % m;
        b >>= 1;
    }
    return res;
}

long long inv(long long a, long long p){
    return binpow(a, p-2, p);
}

vector<ll> fact; // must be init if nCk needed

long long nCk(long long n, long long k, long long p){
    return ((fact[n] * inv(fact[k], p) % p) * inv(fact[n-k], p)) % p;
}

ll sum2(ll a, ll l, ll n){return (n*(a+l))/2;}
ll ceil2(ll a, ll b){ll c=a/b;if(a%b!=0)c++;return c;}
ll floor2(ll x, ll m){ll r=(x%m+m)%m;return (x-r)/m;}

const ll INF=1e16,MAX=1020,MOD=998244353;

ll h,w;
vector<string> graph;
vector<vector<bool>> visited;
ll par[MAX],vsize[MAX];
vector<pll> dydx={{-1,0},{1,0},{0,-1},{0,1}};

void make_set(ll x){
    par[x]=x;
    vsize[x]=1;
}

ll find_set(ll x){
    if(par[x]==x)return par[x];
    return par[x]=find_set(par[x]);
}

void union_sets(ll a,ll b){
    a=find_set(a);
    b=find_set(b);
    if(a!=b){
        if(vsize[a]<vsize[b])swap(a,b);
        par[b]=a;
        vsize[a]+=vsize[b];
    }
}

bool legal(ll x,ll y){
    if(x<0)return 0;
    if(y<0)return 0;
    if(x>=h)return 0;
    if(y>=w)return 0;
    if(graph[x][y]=='.')return 0;
    return 1;
}

void dfs(ll x,ll y){
    if(visited[x][y])return;
    visited[x][y]=1;
    for(pll dd:dydx){
        ll nx=x+dd.fi,ny=y+dd.se;
        if(!legal(nx,ny))continue;
        union_sets(h*x+y,h*nx+ny);
        dfs(nx,ny);
    }
}

void solve() {
    cin>>h>>w;
    for(int i=0;i<h;i++){
        string snow;cin>>snow;
        graph.pb(snow);
    }

    for(int i=0;i<h;i++){
        visited.pb({});
        for(int j=0;j<w;j++){
            make_set(h*i+j);
            visited[i].pb(graph[i][j]=='.');
        }
    }

    ll totalcon=0;
    for(int i=0;i<h;i++){
        for(int j=0;j<w;j++){
            if(visited[i][j])continue;
            totalcon++;
            dfs(i,j);
        }
    }

    ll totaldots=0,probcon=0;
    for(int i=0;i<h;i++){
        for(int j=0;j<w;j++){
            if(graph[i][j]=='#')continue;
            totaldots++;
            set<ll> conn;
            for(pll dd:dydx){
                if(!legal(i+dd.fi,j+dd.se))continue;
                if(graph[i+dd.fi][j+dd.se]=='.')continue;
                conn.insert(find_set(h*(i+dd.fi)+j+dd.se));
            }
            probcon+=totalcon-(conn.size()-1);
        }
    }

    owo(probcon);owo(' ');owo(totaldots);
    cout<<(((probcon)%MOD)*binpow(totaldots,MOD-2,MOD))%MOD;
}

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

	solve();
}

Submission Info

Submission Time
Task E - Christmas Color Grid 1
User lumid
Language C++ 20 (gcc 12.2)
Score 0
Code Size 4158 Byte
Status RE
Exec Time 89 ms
Memory 4424 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 450
Status
AC × 3
AC × 3
RE × 31
Set Name Test Cases
Sample sample00.txt, sample01.txt, sample02.txt
All sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt
Case Name Status Exec Time Memory
sample00.txt AC 7 ms 3428 KiB
sample01.txt AC 1 ms 3428 KiB
sample02.txt AC 1 ms 3404 KiB
testcase00.txt RE 89 ms 4208 KiB
testcase01.txt RE 77 ms 4256 KiB
testcase02.txt RE 77 ms 4328 KiB
testcase03.txt RE 76 ms 4292 KiB
testcase04.txt RE 76 ms 4180 KiB
testcase05.txt RE 76 ms 4352 KiB
testcase06.txt RE 76 ms 4256 KiB
testcase07.txt RE 75 ms 4364 KiB
testcase08.txt RE 75 ms 4264 KiB
testcase09.txt RE 75 ms 4412 KiB
testcase10.txt RE 75 ms 4288 KiB
testcase11.txt RE 75 ms 4220 KiB
testcase12.txt RE 74 ms 4268 KiB
testcase13.txt RE 75 ms 4388 KiB
testcase14.txt RE 76 ms 4200 KiB
testcase15.txt RE 76 ms 4216 KiB
testcase16.txt RE 76 ms 4084 KiB
testcase17.txt RE 77 ms 4424 KiB
testcase18.txt RE 76 ms 4096 KiB
testcase19.txt RE 76 ms 4356 KiB
testcase20.txt RE 75 ms 4380 KiB
testcase21.txt RE 76 ms 4356 KiB
testcase22.txt RE 76 ms 4336 KiB
testcase23.txt RE 76 ms 4328 KiB
testcase24.txt RE 75 ms 4236 KiB
testcase25.txt RE 75 ms 4356 KiB
testcase26.txt RE 74 ms 4356 KiB
testcase27.txt RE 74 ms 4376 KiB
testcase28.txt RE 74 ms 4256 KiB
testcase29.txt RE 74 ms 4360 KiB
testcase30.txt RE 76 ms 4212 KiB