Submission #39102934
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
const int N=88,mod=998244353;
int ksm(int a,int x){
int tot=1;
while(x){
if(x&1) tot=1ll*tot*a%mod;
a=1ll*a*a%mod;
x>>=1ll;
}
return tot;
}
int C[N][N];
void init(int lim){
for(int i=0;i<=lim;i++){
C[i][0]=1;
for(int j=1;j<=i;j++) C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
}
}
int ID(int x){
return (x & 1ll)?mod-1:1;
}
int a[N][N];
int det(int a[N][N],int n){
int tot=1;
for(int k=1;k<=n;k++){
int st=0;
for(int i=k;i<=n;i++){
if(a[i][k]){
st=i;
break;
}
}
if(!st) return 0;
for(int j=1;j<=n;j++) swap(a[k][j],a[st][j]);
if(st!=k) tot=mod-tot;
for(int i=k+1;i<=n;i++){
int t=1ll*a[i][k]*ksm(a[k][k],mod-2)%mod;
for(int j=k;j<=n;j++) a[i][j]=(a[i][j]+mod-1ll*a[k][j]*t%mod)%mod;
}
tot=1ll*tot*a[k][k]%mod;
}
return tot;
}
int n,m,ans;
int f[N][N],f_[N][N];
int val[N][N];
int F[N][N],G[N][N],S[N][N];
int main(){
init(N-5);
cin>>n>>m;
for(int T=1;T<=2;T++){
memset(f,0,sizeof(f));
memset(f_,0,sizeof(f_));
memset(F,0,sizeof(F));
memset(G,0,sizeof(G));
memset(S,0,sizeof(S));
int k=n+m;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
f[i][j]=C[i-1+j-1][i-1];
for(int i=1;i<=m;i++){
if(i>1) f_[i][i+n]=1;
for(int j=1;j<=i;j++)
f[i][j+n]=C[i-j+n-1][n-1];
}
for(int i=1;i<=n;i++){
f_[i+m][i]=1;
for(int j=i;j<=n;j++)
f[i+m][j]=C[j-i+m-1][m-1];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
f[i+m][j+n]=C[n-i+m-j][n-i];
for(int x=0;x<=n;x++){
for(int y=0;y<=m;y++){
for(int i=1;i<=k;i++)
for(int j=1;j<=k;j++){
if(i<=m) a[i][j]=(1ll*f[i][j]*y%mod+f_[i][j])%mod;
else a[i][j]=(1ll*f[i][j]*x%mod+f_[i][j])%mod;
}
val[x][y]=det(a,k);
}
}
for(int i=0;i<=n;i++){
F[i][0]=1;
int val=1;
for(int j=0;j<=n;j++){
if(j==i) continue;
for(int t=n;t>=0;t--){
F[i][t]=1ll*(mod-j)*F[i][t]%mod;
if(t) F[i][t]=(F[i][t]+F[i][t-1])%mod;
}
val=1ll*val*ksm(i+mod-j,mod-2)%mod;
}
for(int t=0;t<=n;t++) F[i][t]=1ll*F[i][t]*val%mod;
}
for(int i=0;i<=m;i++){
G[i][0]=1;
int val=1;
for(int j=0;j<=m;j++){
if(j==i) continue;
for(int t=m;t>=0;t--){
G[i][t]=1ll*(mod-j)*G[i][t]%mod;
if(t) G[i][t]=(G[i][t]+G[i][t-1])%mod;
}
val=1ll*val*ksm(i+mod-j,mod-2)%mod;
}
for(int t=0;t<=m;t++) G[i][t]=1ll*G[i][t]*val%mod;
}
for(int x=0;x<=n;x++){
for(int y=0;y<=m;y++){
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
S[i][j]=(S[i][j]+1ll*val[x][y]*F[x][i]%mod*G[y][j]%mod)%mod;
}
}
}
}
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
if(__gcd(i,j)==1) ans=(ans+1ll*S[i][j]*ID(n*m-i*j)%mod)%mod;
}
}
swap(n,m);
}
cout<<ans;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Perfect Strings |
| User | Appleblue17 |
| Language | C++ (GCC 9.2.1) |
| Score | 2000 |
| Code Size | 2896 Byte |
| Status | AC |
| Exec Time | 2726 ms |
| Memory | 3828 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 2000 / 2000 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 01.txt, 02.txt, 03.txt |
| All | 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01.txt | AC | 8 ms | 3788 KiB |
| 02.txt | AC | 3 ms | 3696 KiB |
| 03.txt | AC | 650 ms | 3748 KiB |
| 04.txt | AC | 3 ms | 3788 KiB |
| 05.txt | AC | 3 ms | 3692 KiB |
| 06.txt | AC | 4 ms | 3764 KiB |
| 07.txt | AC | 2 ms | 3620 KiB |
| 08.txt | AC | 4 ms | 3584 KiB |
| 09.txt | AC | 3 ms | 3744 KiB |
| 10.txt | AC | 2 ms | 3584 KiB |
| 11.txt | AC | 5 ms | 3700 KiB |
| 12.txt | AC | 4 ms | 3584 KiB |
| 13.txt | AC | 3 ms | 3756 KiB |
| 14.txt | AC | 5 ms | 3700 KiB |
| 15.txt | AC | 9 ms | 3732 KiB |
| 16.txt | AC | 2 ms | 3768 KiB |
| 17.txt | AC | 4 ms | 3744 KiB |
| 18.txt | AC | 6 ms | 3752 KiB |
| 19.txt | AC | 5 ms | 3768 KiB |
| 20.txt | AC | 7 ms | 3768 KiB |
| 21.txt | AC | 37 ms | 3724 KiB |
| 22.txt | AC | 36 ms | 3644 KiB |
| 23.txt | AC | 51 ms | 3816 KiB |
| 24.txt | AC | 69 ms | 3584 KiB |
| 25.txt | AC | 14 ms | 3772 KiB |
| 26.txt | AC | 25 ms | 3632 KiB |
| 27.txt | AC | 116 ms | 3764 KiB |
| 28.txt | AC | 146 ms | 3776 KiB |
| 29.txt | AC | 436 ms | 3608 KiB |
| 30.txt | AC | 392 ms | 3708 KiB |
| 31.txt | AC | 896 ms | 3712 KiB |
| 32.txt | AC | 1488 ms | 3728 KiB |
| 33.txt | AC | 1696 ms | 3760 KiB |
| 34.txt | AC | 2176 ms | 3732 KiB |
| 35.txt | AC | 2306 ms | 3600 KiB |
| 36.txt | AC | 2581 ms | 3828 KiB |
| 37.txt | AC | 2580 ms | 3800 KiB |
| 38.txt | AC | 2726 ms | 3728 KiB |