Submission #2011989


Source Code Expand

#include<bits/stdc++.h>
#define L long long
#define vi vector<int>
#define pb push_back
#define pi pair<int,int>
#define pii pair<pi,int>
#define aa first
#define bb second
#define xx aa.aa
#define yy aa.bb
#define zz bb
#define mp make_pair
#define mpp(a,b,c) mp(mp(a,b),c)
using namespace std;
using namespace std;
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef double ld;
#define fi first
#define se second
#define fe first
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
#define Edg int M=0,fst[SZ],vb[SZ],nxt[SZ];void ad_de(int a,int b){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;}void adde(int a,int b){ad_de(a,b);ad_de(b,a);}
#define Edgc int M=0,fst[SZ],vb[SZ],nxt[SZ],vc[SZ];void ad_de(int a,int b,int c){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;vc[M]=c;}void adde(int a,int b,int c){ad_de(a,b,c);ad_de(b,a,c);}
#define es(x,e) (int e=fst[x];e;e=nxt[e])
#define esb(x,e,b) (int e=fst[x],b=vb[e];e;e=nxt[e],b=vb[e])
//why use this slow code?
//because FFT is super slow
const int MOD=998244353;
#define SZ 666666
ll w[2][SZ],rev[SZ];
inline ll qp(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b&1) ans=ans*a%MOD;
        a=a*a%MOD; b>>=1;
    }
    return ans;
}
int K;
inline void fftinit(int n)
{
    for(K=1;K<n;K<<=1);
    w[0][0]=w[0][K]=1;
    ll g=qp(3,(MOD-1)/K);
    for(int i=1;i<K;i++) w[0][i]=w[0][i-1]*g%MOD;
    for(int i=0;i<=K;i++) w[1][i]=w[0][K-i];
}
inline void fft(int* x,int v)
{
    for(int i=0;i<K;i++) x[i]=(x[i]%MOD+MOD)%MOD;
    for(int i=0,j=0;i<K;i++)
    {
        if(i>j) swap(x[i],x[j]);
        for(int l=K>>1;(j^=l)<l;l>>=1);
    }
    for(int i=2;i<=K;i<<=1)
        for(int l=0;l<i>>1;l++)
        {
            register int W=w[v][K/i*l],*p=x+l+(i>>1),*q=x+l,t;
            for(register int j=0;j<K;j+=i)
            {
                p[j]=(q[j]-(t=(ll)p[j]*W%MOD)<0)?(q[j]-t+MOD):(q[j]-t);
                q[j]=(q[j]+t-MOD>=0)?(q[j]+t-MOD):(q[j]+t);
            }
        }
    if(!v) return;
    ll rv=qp(K,MOD-2);
    for(int i=0;i<K;i++) x[i]=x[i]*rv%MOD;
}
struct poly
{
    vector<int> ps;
    inline int cs() {return ps.size()-1;}
    inline int& operator [] (int x) {return ps[x];} //ps.at(x)
    inline void sc(int x) {ps.resize(x+1);}
    inline void dbg()
    {
        bool fi=0;
        for(int i=cs();i>=0;i--)
        {
            ps[i]=(ps[i]%MOD+MOD)%MOD;
            if(!ps[i]) continue;
            if(ps[i]>MOD/2) ps[i]-=MOD;
            if(fi)
            {
                if(i==0) printf("%+d",ps[i]);
                else if(ps[i]==1) printf("+");
                else if(ps[i]==-1) printf("-");
                else printf("%+d",ps[i]);
            }
            else
            {
                if(i==0) printf("%d",ps[i]);
                else if(ps[i]==1);
                else if(ps[i]==-1) printf("-");
                else printf("%d",ps[i]);
            }
            if(i>1) printf("x^%d",i);
            else if(i==1) printf("x");
            fi=1;
        }
        if(!fi) printf("0");
        putchar(10);
    }
    inline void clr()
    {
        int p=cs()+1;
        while(p&&!ps[p-1]) --p;
        sc(p-1);
    }
};
namespace PolyMul{int ta[SZ],tb[SZ],tc[SZ];}
inline poly operator * (poly a,poly b)
{
    using namespace PolyMul;
    if(a.cs()<180||b.cs()<180)
    {
        poly g;
        g.sc(a.cs()+b.cs());
        int*G=&g[0],*A=&a[0],*B=&b[0];
        for(int i=0;i<=a.cs();i++)
        {
            register int*h=G+i,j=0; register ll x=A[i];
            for(;j<=b.cs();++j) h[j]=(h[j]+x*(ll)B[j])%MOD;
        }
        return g;
    }
    poly c;
    int t=a.cs()+b.cs();
    c.sc(t); fftinit(t+1);
    memset(ta,0,sizeof(int)*K);
    memset(tb,0,sizeof(int)*K);
    memset(tc,0,sizeof(int)*K);
    for(int i=a.cs();i>=0;i--) ta[i]=a[i];
    for(int i=b.cs();i>=0;i--) tb[i]=b[i];
    fft(ta,0); fft(tb,0);
    for(int i=0;i<K;i++) tc[i]=(ll)ta[i]*tb[i]%MOD;
    fft(tc,1);
    for(int i=t;i>=0;i--) c[i]=tc[i];
    c.clr();
    return c;
}
const int q=998244353;
int n,a[20010],b[20010],m1,m2;
char s[10010],t[10010];
poly x,y,z;
inline int C(int n,int m)
{
	return (L)a[n]*b[m]%q*b[n-m]%q;
}
inline poly power(poly a,int b)
{
	if(!b)
	  {
	   poly x;
	   x.sc(0);
	   x[0]=1;
	   return x;
	  }
	poly c=power(a,b>>1);
	c=c*c;
	c.sc(m1+m2);
	if(b&1)
	  c=c*a,c.sc(m1+m2);
	return c;
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int i;
	scanf("%s%s",&s,&t);
	n=strlen(s);
	a[0]=1;
	for(i=1;i<=n*2;i++)
	  a[i]=(L)a[i-1]*i%q;
	b[0]=b[1]=1;
	for(i=2;i<=n*2;i++)
	  b[i]=q-(L)q/i*b[q%i]%q;
	for(i=2;i<=n*2;i++)
	  b[i]=(L)b[i]*b[i-1]%q;
	for(i=0;i<n;i++)
	  if(s[i]=='1')
	    if(t[i]=='1')
	      m1++;
	    else
	      m2++;
	x.sc(m1+m2);
	y.sc(m1+m2);
	for(i=0;i<=m1;i++)
	  {
	   x[i+1]=b[i+1];
	   y[i]=1;
	  }
	z=power(x,m2)*y;
	i=(L)z[m1+m2]*a[m1+m2]%q*a[m2]%q*a[m1]%q;
	i=(i+q)%q;
	printf("%d\n",i);
	return 0;
}

Submission Info

Submission Time
Task E - Shuffle and Swap
User fateice
Language C++14 (GCC 5.4.1)
Score 1700
Code Size 5100 Byte
Status AC
Exec Time 100 ms
Memory 13440 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:176:20: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘char (*)[10010]’ [-Wformat=]
  scanf("%s%s",&s,&t);
                    ^
./Main.cpp:176:20: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘char (*)[10010]’ [-Wformat=]
./Main.cpp:176:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s%s",&s,&t);
                     ^

Judge Result

Set Name Sample Partial All
Score / Max Score 0 / 0 1200 / 1200 500 / 500
Status
AC × 4
AC × 46
AC × 88
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
Partial sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_2_01.txt, subtask_2_02.txt, subtask_2_03.txt, subtask_2_04.txt, subtask_2_05.txt, subtask_2_06.txt, subtask_2_07.txt, subtask_2_08.txt, subtask_2_09.txt, subtask_2_10.txt, subtask_2_11.txt, subtask_2_12.txt, subtask_2_13.txt, subtask_2_14.txt, subtask_2_15.txt, subtask_2_16.txt, subtask_2_17.txt, subtask_2_18.txt, subtask_2_19.txt, subtask_2_20.txt, subtask_2_21.txt, subtask_2_22.txt, subtask_2_23.txt, subtask_2_24.txt, subtask_2_25.txt, subtask_2_26.txt, subtask_2_27.txt, subtask_2_28.txt, subtask_2_29.txt, subtask_2_30.txt, subtask_2_31.txt, subtask_2_32.txt, subtask_2_33.txt, subtask_2_34.txt, subtask_2_35.txt, subtask_2_36.txt, subtask_2_37.txt, subtask_2_38.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KiB
sample_02.txt AC 1 ms 256 KiB
sample_03.txt AC 1 ms 256 KiB
sample_04.txt AC 1 ms 256 KiB
subtask_1_01.txt AC 1 ms 256 KiB
subtask_1_02.txt AC 1 ms 256 KiB
subtask_1_03.txt AC 1 ms 256 KiB
subtask_1_04.txt AC 1 ms 256 KiB
subtask_1_05.txt AC 1 ms 256 KiB
subtask_1_06.txt AC 1 ms 256 KiB
subtask_1_07.txt AC 1 ms 256 KiB
subtask_1_08.txt AC 1 ms 256 KiB
subtask_1_09.txt AC 1 ms 256 KiB
subtask_1_10.txt AC 1 ms 256 KiB
subtask_1_11.txt AC 1 ms 256 KiB
subtask_1_12.txt AC 1 ms 256 KiB
subtask_1_13.txt AC 4 ms 10496 KiB
subtask_1_14.txt AC 1 ms 256 KiB
subtask_1_15.txt AC 3 ms 10496 KiB
subtask_1_16.txt AC 3 ms 10496 KiB
subtask_1_17.txt AC 4 ms 10496 KiB
subtask_1_18.txt AC 4 ms 10496 KiB
subtask_1_19.txt AC 4 ms 10496 KiB
subtask_1_20.txt AC 4 ms 10496 KiB
subtask_1_21.txt AC 4 ms 10496 KiB
subtask_1_22.txt AC 4 ms 10496 KiB
subtask_1_23.txt AC 4 ms 10496 KiB
subtask_1_24.txt AC 4 ms 10496 KiB
subtask_1_25.txt AC 4 ms 10496 KiB
subtask_1_26.txt AC 4 ms 10496 KiB
subtask_1_27.txt AC 4 ms 10496 KiB
subtask_1_28.txt AC 4 ms 10496 KiB
subtask_1_29.txt AC 4 ms 10496 KiB
subtask_1_30.txt AC 4 ms 10496 KiB
subtask_1_31.txt AC 4 ms 10496 KiB
subtask_1_32.txt AC 4 ms 10496 KiB
subtask_1_33.txt AC 4 ms 10496 KiB
subtask_1_34.txt AC 4 ms 10496 KiB
subtask_1_35.txt AC 4 ms 10496 KiB
subtask_1_36.txt AC 4 ms 10496 KiB
subtask_1_37.txt AC 4 ms 10496 KiB
subtask_1_38.txt AC 4 ms 10496 KiB
subtask_1_39.txt AC 5 ms 10496 KiB
subtask_1_40.txt AC 4 ms 10496 KiB
subtask_1_41.txt AC 4 ms 10496 KiB
subtask_1_42.txt AC 4 ms 10496 KiB
subtask_2_01.txt AC 2 ms 384 KiB
subtask_2_02.txt AC 2 ms 384 KiB
subtask_2_03.txt AC 7 ms 12800 KiB
subtask_2_04.txt AC 38 ms 13184 KiB
subtask_2_05.txt AC 48 ms 13184 KiB
subtask_2_06.txt AC 2 ms 640 KiB
subtask_2_07.txt AC 15 ms 13184 KiB
subtask_2_08.txt AC 20 ms 13184 KiB
subtask_2_09.txt AC 50 ms 13312 KiB
subtask_2_10.txt AC 80 ms 13440 KiB
subtask_2_11.txt AC 95 ms 13440 KiB
subtask_2_12.txt AC 87 ms 13440 KiB
subtask_2_13.txt AC 43 ms 13312 KiB
subtask_2_14.txt AC 50 ms 13312 KiB
subtask_2_15.txt AC 45 ms 13312 KiB
subtask_2_16.txt AC 43 ms 13312 KiB
subtask_2_17.txt AC 52 ms 13312 KiB
subtask_2_18.txt AC 43 ms 13312 KiB
subtask_2_19.txt AC 48 ms 13184 KiB
subtask_2_20.txt AC 50 ms 13184 KiB
subtask_2_21.txt AC 45 ms 13184 KiB
subtask_2_22.txt AC 90 ms 13440 KiB
subtask_2_23.txt AC 98 ms 13440 KiB
subtask_2_24.txt AC 60 ms 13440 KiB
subtask_2_25.txt AC 65 ms 13440 KiB
subtask_2_26.txt AC 100 ms 13440 KiB
subtask_2_27.txt AC 95 ms 13440 KiB
subtask_2_28.txt AC 52 ms 13184 KiB
subtask_2_29.txt AC 43 ms 13184 KiB
subtask_2_30.txt AC 50 ms 13184 KiB
subtask_2_31.txt AC 46 ms 13312 KiB
subtask_2_32.txt AC 43 ms 13312 KiB
subtask_2_33.txt AC 43 ms 13312 KiB
subtask_2_34.txt AC 48 ms 13312 KiB
subtask_2_35.txt AC 81 ms 13440 KiB
subtask_2_36.txt AC 75 ms 13440 KiB
subtask_2_37.txt AC 75 ms 13440 KiB
subtask_2_38.txt AC 85 ms 13440 KiB