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 |
|
|
| 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 |