Submission #2303616


Source Code Expand

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

#define int long long

#define rep(i,n) for(int i=0;i<(n);i++)
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define fi first
#define se second
typedef vector<int>vint;
typedef pair<int,int>pint;
typedef vector<pint>vpint;

template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;}
template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;}

const int mod=1000000007;
struct UnionFindTree{
    vector<int>par,sz;
    UnionFindTree(int n){
        par.resize(n);
        sz.resize(n);
        for(int i=0;i<n;i++){
            par[i]=i;
            sz[i]=1;
        }
    }
    int find(int x){
        return x==par[x]?x:par[x]=find(par[x]);
    }
    void unite(int x,int y){
        x=find(x);y=find(y);
        if(x==y)return;
        if(sz[x]<sz[y])swap(x,y);
        sz[x]+=sz[y];
        par[y]=x;
    }
    bool areSame(int x,int y){
        return find(x)==find(y);
    }
    int size(int x){
        return sz[find(x)];
    }
};

int solve(vector<vint>bm){
    if(bm.size()==0||bm[0].size()==0)return 1;

    int h=bm.size();
    int w=bm[0].size();

    UnionFindTree uf(h+w);
    rep(i,h)rep(j,w)if(bm[i][j])uf.unite(i,h+j);

    int cnt=h+w;
    rep(i,h+w)if(uf.find(i)==i)cnt--;
    int ret=1;
    rep(i,cnt)ret=ret*2%mod;
    return ret;
}

signed main(){
    int H,W;
    cin>>H>>W;
    vector<string>fld(H);
    rep(i,H)cin>>fld[i];
    int ans=1;
    if(H&1){
        bool flag=false;
        rep(j,W)if(fld[H/2][j]!=fld[H/2][W-1-j])flag=true;
        if(flag)ans=ans*2;
        fld.erase(fld.begin()+H/2);
        H--;
    }

    if(W&1){
        bool flag=false;
        rep(i,H)if(fld[i][W/2]!=fld[H-1-i][W/2])flag=true;
        if(flag)ans=ans*2;
        rep(i,H)fld[i]=fld[i].substr(0,W/2)+fld[i].substr(W/2+1,W/2);
        W--;
    }

    vector<vint>bm(H/2,vint(W/2));
    rep(i,H/2)rep(j,W/2){
        int cnt[26]={};
        cnt[fld[i][j]-'a']++;
        cnt[fld[i][W-1-j]-'a']++;
        cnt[fld[H-1-i][W-1-j]-'a']++;
        cnt[fld[H-1-i][j]-'a']++;
        int w=24;
        rep(k,26){
            for(int l=1;l<=cnt[k];l++)w/=l;
        }
        if(w==24){
            ans=ans*12%mod;
            bm[i][j]=1;
        }
        else{
            ans=ans*w%mod;
        }
    }

    ans=ans*solve(bm)%mod;
    cout<<ans<<endl;
    return 0;
}

Submission Info

Submission Time
Task I - Reverse Grid
User latte0119
Language C++14 (GCC 5.4.1)
Score 1900
Code Size 2466 Byte
Status AC
Exec Time 4 ms
Memory 512 KB

Judge Result

Set Name sample all
Score / Max Score 0 / 0 1900 / 1900
Status
AC × 2
AC × 39
Set Name Test Cases
sample sample-01.txt, sample-02.txt
all sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
01-01.txt AC 1 ms 256 KB
01-02.txt AC 1 ms 256 KB
01-03.txt AC 1 ms 256 KB
01-04.txt AC 1 ms 256 KB
01-05.txt AC 1 ms 256 KB
01-06.txt AC 1 ms 256 KB
01-07.txt AC 1 ms 256 KB
01-08.txt AC 1 ms 256 KB
01-09.txt AC 1 ms 256 KB
01-10.txt AC 4 ms 512 KB
01-11.txt AC 4 ms 384 KB
01-12.txt AC 4 ms 512 KB
01-13.txt AC 4 ms 512 KB
01-14.txt AC 2 ms 256 KB
01-15.txt AC 2 ms 256 KB
01-16.txt AC 4 ms 512 KB
01-17.txt AC 4 ms 512 KB
01-18.txt AC 4 ms 512 KB
01-19.txt AC 4 ms 512 KB
01-20.txt AC 4 ms 512 KB
01-21.txt AC 4 ms 512 KB
01-22.txt AC 1 ms 256 KB
01-23.txt AC 3 ms 384 KB
01-24.txt AC 4 ms 512 KB
01-25.txt AC 4 ms 512 KB
01-26.txt AC 4 ms 512 KB
01-27.txt AC 1 ms 256 KB
01-28.txt AC 2 ms 256 KB
01-29.txt AC 1 ms 256 KB
01-30.txt AC 2 ms 256 KB
01-31.txt AC 4 ms 512 KB
01-32.txt AC 4 ms 512 KB
01-33.txt AC 4 ms 512 KB
01-34.txt AC 4 ms 512 KB
01-35.txt AC 4 ms 512 KB
sample-01.txt AC 1 ms 256 KB
sample-02.txt AC 1 ms 256 KB