提出 #50475642


ソースコード 拡げる

// 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*MAX],vsize[MAX*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();
}

提出情報

提出日時
問題 E - Christmas Color Grid 1
ユーザ lumid
言語 C++ 20 (gcc 12.2)
得点 0
コード長 4166 Byte
結果 WA
実行時間 99 ms
メモリ 82660 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 450
結果
AC × 3
AC × 28
WA × 6
セット名 テストケース
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
ケース名 結果 実行時間 メモリ
sample00.txt AC 3 ms 3396 KiB
sample01.txt AC 1 ms 3600 KiB
sample02.txt AC 1 ms 3456 KiB
testcase00.txt AC 53 ms 17856 KiB
testcase01.txt AC 61 ms 20332 KiB
testcase02.txt AC 99 ms 80100 KiB
testcase03.txt AC 89 ms 82660 KiB
testcase04.txt AC 41 ms 43512 KiB
testcase05.txt AC 48 ms 51464 KiB
testcase06.txt AC 19 ms 17624 KiB
testcase07.txt AC 22 ms 20412 KiB
testcase08.txt AC 22 ms 18600 KiB
testcase09.txt AC 24 ms 20324 KiB
testcase10.txt AC 27 ms 18452 KiB
testcase11.txt AC 30 ms 20276 KiB
testcase12.txt WA 33 ms 19428 KiB
testcase13.txt AC 37 ms 20408 KiB
testcase14.txt WA 40 ms 19516 KiB
testcase15.txt AC 43 ms 20328 KiB
testcase16.txt AC 44 ms 20032 KiB
testcase17.txt AC 48 ms 20388 KiB
testcase18.txt WA 48 ms 18480 KiB
testcase19.txt AC 54 ms 20408 KiB
testcase20.txt AC 61 ms 20128 KiB
testcase21.txt AC 62 ms 20472 KiB
testcase22.txt WA 63 ms 18612 KiB
testcase23.txt AC 67 ms 20496 KiB
testcase24.txt AC 67 ms 20844 KiB
testcase25.txt AC 70 ms 22052 KiB
testcase26.txt WA 77 ms 34668 KiB
testcase27.txt AC 76 ms 35440 KiB
testcase28.txt WA 73 ms 40956 KiB
testcase29.txt AC 81 ms 45748 KiB
testcase30.txt AC 18 ms 20432 KiB