已经卡死了o(╥﹏╥)o
查看原帖
已经卡死了o(╥﹏╥)o
468173
wyh13578944579楼主2021/7/27 09:31
#include<bits/stdc++.h>
using namespace std;
#define M 998244353
#define ll long long
ll dx[4]={0,0,1,-1};
ll dy[4]={1,-1,0,0};
ll n,m,k,tot;
long long sum,ans=1;
char ma[10010][10010];
long long ksm(long long x,long long y){
    long long ans=1,cnt=x;
    while (y){
        if (y&1) ans=ans*cnt%M;
        cnt=cnt*cnt%M;
        y>>=1;
    }
    return ans;
} 
ll find(ll x,ll y){
    ll js=0;
    for (ll i=0;i<4;i++){
        ll xx=x+dx[i],yy=y+dy[i];
        if (xx>=1&&xx<=n&&yy>=1&&yy<=m&&ma[xx][yy]!='X') js++;
    }
    return js;
}
void dfs(ll x,ll y){
    if (find(x,y)==1) tot++;
    ma[x][y]='W';
    sum++;
    for (ll i=0;i<4;i++){
        ll xx=x+dx[i],yy=y+dy[i];
        if (xx>=1&&xx<=n&&yy>=1&&yy<=m&&ma[xx][yy]=='O'){
            dfs(xx,yy);
        }
    }
}

int main(){
    cin>>n>>m>>k;
    for (ll i=1;i<=n;i++){
        for (ll j=1;j<=m;j++){
            cin>>ma[i][j];
        }
    }
    for (ll i=1;i<=n;i++){
        for (ll j=1;j<=m;j++){
            if (ma[i][j]=='O'){
                sum=tot=0;
                dfs(i,j);
                if (tot<2&&sum>1){
                    cout<<0<<endl;
                    return 0;
                }
                ans=ans*k%M*ksm(k-1,sum-1)%M;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

一直说我最后一大组数据中倒数第三个数据过不去ε=(´ο`*)))唉

2021/7/27 09:31
加载中...