Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38123 LYLAKIOI 【BJ】T2 C++ 解答错误 65 5996 MS 11732 KB 2172 2025-06-22 19:32:47

Tests(13/20):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=4e5+10,mod=998244353; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,a[15][15]; int f[1<<15][15],g[1<<15][15],w[1<<15][15],h[15][15]; inline int add(int a,int b){if((a+=b)>=mod)a-=mod;return a;} void slv(){ n=read(); up(i,0,n-1)up(j,0,n-1)a[i][j]=read(); up(i,0,n-1)f[1<<i][i]=1; up(i,0,(1<<n)-1)up(j,0,n-1)if((i>>j)&1){ int U=i^(1<<j); for(int S=(U-1)&U;S;S=(S-1)&U){ int sum1=w[U^S][j],sum2=w[S][j]; f[i][j]=add(f[i][j],sum1*1ll*sum2%mod); } up(p,0,n-1)if((U>>p)&1)if(a[j][p]){ f[i][j]=add(f[i][j],f[U][p]*2ll%mod); } up(k,0,n-1)if(a[k][j])w[i][k]=add(w[i][k],f[i][j]); } g[(1<<n)-1][0]=1; down(i,(1<<n)-1,1)up(j,0,n-1)if((i>>j)&1){ int U=i^(1<<j); for(int S=(U-1)&U;S;S=(S-1)&U){ int sum=0; up(q,0,n-1)if(((U^S)>>q)&1)if(a[j][q])sum=add(sum,f[U^S][q]); up(p,0,n-1)if((S>>p)&1)if(a[j][p])g[S][p]=add(g[S][p],g[i][j]*2ll*sum%mod); up(p,0,n-1)if((S>>p)&1)h[j][p]=add(h[j][p],sum*2ll*f[S][p]%mod*1ll*g[i][j]%mod); } up(p,0,n-1)if((U>>p)&1)if(a[j][p]) g[U][p]=add(g[U][p],g[i][j]*2ll%mod),h[j][p]=add(h[j][p],g[i][j]*2ll*f[U][p]%mod); } printf("%d\n",f[(1<<n)-1][0]); up(i,0,n-1){ up(j,0,n-1){ if(!a[i][j])printf("0 "); else { int ans=mod-h[i][j]; up(k,0,(1<<n)-1)if(((k>>i)&1)&&((k>>j)&1))ans=add(ans,f[k][i]*1ll*g[k][i]%mod); printf("%d ",ans); } }printf("\n"); } } int main(){ //freopen("1.in","r",stdin),freopen("1.out","w",stdout); slv(); return 0; }


测评信息: