Submission #1613505


Source Code Expand

#include <bits/stdc++.h>
// iostream is too mainstream
#include <cstdio>
// bitch please
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <list>
#include <cmath>
#include <iomanip>
#include <time.h>
#define dibs reserve
#define OVER9000 1234567890123456789LL
#define ALL_THE(CAKE,LIE) for(auto LIE =CAKE.begin(); LIE != CAKE.end(); LIE++)
#define tisic 47
#define soclose 1e-8
#define chocolate win
// so much chocolate
#define patkan 9
#define ff first
#define ss second
#define abs(x) ((x < 0)?-(x):x)
#define uint unsigned int
#define dbl long double
#define pi 3.14159265358979323846
using namespace std;
// mylittledoge

typedef long long cat;

#ifdef DONLINE_JUDGE
	// palindromic tree is better than splay tree!
	#define lld I64d
#endif

cat mod =998244353;

cat pw(cat a, cat e) {
	if(e <= 0) return 1;
	cat x =pw(a,e/2);
	x =(x*x)%mod;
	if(e&1) x =(x*a)%mod;
	return x;
}

typedef unsigned long long ll;

ll MOD =998244353LL; // prime, MOD-1 divisible by a large power of 2

ll pw(ll a, ll e) {
	if(e <= 0) return 1;
	ll x =pw(a,e/2);
	x =(x*x)%MOD;
	if(e%2 != 0) x =(x*a)%MOD;
	return x;}

ll proot =3; // primitive MOD-1th root of unity %MOD
vector< vector<ll> > OM;

vector<ll> DFT(vector<ll> &A, int N, int d, int x, int dir) {
	vector<ll> ret(N,0);

	if(N == 1) {
		ret[0] =A[x];
		return ret;}
	if(N == 2) {
		ret[0] =(A[x]+A[x+d])%MOD;
		ret[1] =(A[x]+MOD-A[x+d])%MOD;
		return ret;}

	int dep =0, n =N;
	while(n > 1) {n /=2; dep++;}

	vector<ll> DFT0[2];
	DFT0[0] =DFT(A,N/2,d*2,x,dir);
	DFT0[1] =DFT(A,N/2,d*2,x+d,dir);
	for(int i =0; i < N/2; i++) {
		ll com =OM[dep][(N+(1LL*dir*i)%N)%N];
		ret[i] =(DFT0[0][i]+com*DFT0[1][i])%MOD;
		ret[i+N/2] =(DFT0[0][i]+(MOD-com)*DFT0[1][i])%MOD;}
	return ret;}

int SN =1<<17; // arbitrary power of 2 such that N <= SN

vector<ll> convolution(vector<ll> A, vector<ll> B) {

	int Smin =1;
	while(Smin < (int)A.size()*2) Smin *=2;

	// init na omegy
	if(OM.empty()) {
		OM.resize(21);
		for(int i =0; i < 21; i++) {
			ll root =pw(proot,(MOD-1)/(1<<i)); // prim. root modulo N=2**i
			OM[i].resize(1<<i,1);
			for(int j =1; j < (1<<i); j++) OM[i][j] =(OM[i][j-1]*root)%MOD;
			reverse(begin(OM[i])+1,end(OM[i]));} // see NOTE
		}

	A.resize(Smin,0); B.resize(Smin,0);
	vector<ll> FA =DFT(A,A.size(),1,0,1);
	vector<ll> FB =DFT(B,B.size(),1,0,1);

	vector<ll> Fret(FA.size(),0);
	for(uint i =0; i < FA.size(); i++) Fret[i] =(FA[i]*FB[i])%MOD;

	vector<ll> ret =DFT(Fret,Fret.size(),1,0,-1);
	for(uint i =0; i < ret.size(); i++) ret[i] =(ret[i]*pw(ret.size(),MOD-2))%MOD; // normalise
	ret.resize(A.size()*2-1);

	return ret;}

vector<ll> solve(vector<ll> FI, int e) {
	if(e <= 0) {
		vector<ll> F(FI.size(),0);
		F[0] =1;
		return F;
	}
	vector<ll> F =solve(FI,e/2);
	F =convolution(F,F);
	if(e%2) F =convolution(F,FI);
	return F;
}

int main() {
	cin.sync_with_stdio(0);
	cin.tie(0);
	cout << fixed << setprecision(10);
	string A,B;
	cin >> A >> B;
	int N =A.length(), x =0, y =0;
	for(int i =0; i < N; i++) {
		if(A[i] == '1' && B[i] == '1') y++;
		if(A[i] == '1' && B[i] == '0') x++;
	}
	vector<cat> fac(N+1,1);
	for(int i =1; i <= N; i++) fac[i] =(fac[i-1]*i)%mod;

	vector<ll> FI(y+x+1,0);
	for(int i =1; i <= y+x; i++) FI[i] =pw(fac[i],mod-2);
	vector<ll> F =solve(FI,x);

	cat ans =0;
	for(int i =0; i <= y+x; i++) ans =(ans+F[i])%mod;
	ans =(ans*fac[x])%mod;
	ans =(ans*fac[y])%mod;
	ans =(ans*fac[x+y])%mod;
	if(ans < 0) ans +=mod;
	cout << ans << "\n";
	return 0;}

// look at my code
// my code is amazing

Submission Info

Submission Time
Task E - Shuffle and Swap
User xellos
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3733 Byte
Status TLE
Exec Time 2106 ms
Memory 103684 KB

Judge Result

Set Name Sample Partial All
Score / Max Score 0 / 0 0 / 1200 0 / 500
Status
AC × 4
AC × 17
TLE × 29
AC × 26
TLE × 62
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 36 ms 16640 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 37 ms 16768 KB
sample_04.txt AC 40 ms 16768 KB
subtask_1_01.txt AC 36 ms 16640 KB
subtask_1_02.txt AC 1 ms 256 KB
subtask_1_03.txt AC 36 ms 16640 KB
subtask_1_04.txt AC 1 ms 256 KB
subtask_1_05.txt AC 36 ms 16640 KB
subtask_1_06.txt AC 36 ms 16640 KB
subtask_1_07.txt AC 36 ms 16640 KB
subtask_1_08.txt AC 37 ms 16640 KB
subtask_1_09.txt AC 187 ms 21128 KB
subtask_1_10.txt AC 53 ms 17280 KB
subtask_1_11.txt TLE 2105 ms 102600 KB
subtask_1_12.txt TLE 2106 ms 86396 KB
subtask_1_13.txt TLE 2105 ms 102660 KB
subtask_1_14.txt AC 2 ms 256 KB
subtask_1_15.txt AC 45 ms 17024 KB
subtask_1_16.txt AC 71 ms 18000 KB
subtask_1_17.txt TLE 2106 ms 86360 KB
subtask_1_18.txt TLE 2106 ms 86336 KB
subtask_1_19.txt TLE 2106 ms 86384 KB
subtask_1_20.txt TLE 2106 ms 86408 KB
subtask_1_21.txt TLE 2106 ms 86128 KB
subtask_1_22.txt TLE 2105 ms 86344 KB
subtask_1_23.txt TLE 2106 ms 86108 KB
subtask_1_24.txt TLE 2106 ms 102484 KB
subtask_1_25.txt TLE 2106 ms 102740 KB
subtask_1_26.txt TLE 2106 ms 102612 KB
subtask_1_27.txt TLE 2106 ms 86344 KB
subtask_1_28.txt TLE 2106 ms 86412 KB
subtask_1_29.txt TLE 2106 ms 86412 KB
subtask_1_30.txt TLE 2106 ms 86404 KB
subtask_1_31.txt TLE 2106 ms 86316 KB
subtask_1_32.txt TLE 2106 ms 86344 KB
subtask_1_33.txt TLE 2106 ms 86392 KB
subtask_1_34.txt TLE 2106 ms 86348 KB
subtask_1_35.txt TLE 2106 ms 86344 KB
subtask_1_36.txt TLE 2106 ms 86344 KB
subtask_1_37.txt TLE 2106 ms 86344 KB
subtask_1_38.txt TLE 2106 ms 86344 KB
subtask_1_39.txt TLE 2106 ms 86284 KB
subtask_1_40.txt TLE 2105 ms 86412 KB
subtask_1_41.txt TLE 2105 ms 86412 KB
subtask_1_42.txt TLE 2105 ms 86412 KB
subtask_2_01.txt AC 37 ms 16768 KB
subtask_2_02.txt AC 1 ms 384 KB
subtask_2_03.txt TLE 2106 ms 102600 KB
subtask_2_04.txt TLE 2106 ms 86976 KB
subtask_2_05.txt TLE 2105 ms 86996 KB
subtask_2_06.txt AC 11 ms 640 KB
subtask_2_07.txt AC 341 ms 26500 KB
subtask_2_08.txt AC 1401 ms 54276 KB
subtask_2_09.txt TLE 2106 ms 103132 KB
subtask_2_10.txt TLE 2106 ms 103580 KB
subtask_2_11.txt TLE 2106 ms 103684 KB
subtask_2_12.txt TLE 2106 ms 103580 KB
subtask_2_13.txt TLE 2105 ms 87088 KB
subtask_2_14.txt TLE 2106 ms 87088 KB
subtask_2_15.txt TLE 2106 ms 87120 KB
subtask_2_16.txt TLE 2106 ms 87024 KB
subtask_2_17.txt TLE 2106 ms 87108 KB
subtask_2_18.txt TLE 2106 ms 87024 KB
subtask_2_19.txt TLE 2106 ms 86892 KB
subtask_2_20.txt TLE 2106 ms 86892 KB
subtask_2_21.txt TLE 2106 ms 86892 KB
subtask_2_22.txt TLE 2106 ms 103448 KB
subtask_2_23.txt TLE 2106 ms 103448 KB
subtask_2_24.txt TLE 2106 ms 103548 KB
subtask_2_25.txt TLE 2106 ms 103548 KB
subtask_2_26.txt TLE 2106 ms 103604 KB
subtask_2_27.txt TLE 2106 ms 103512 KB
subtask_2_28.txt TLE 2106 ms 86904 KB
subtask_2_29.txt TLE 2106 ms 86924 KB
subtask_2_30.txt TLE 2106 ms 86912 KB
subtask_2_31.txt TLE 2106 ms 87092 KB
subtask_2_32.txt TLE 2106 ms 87092 KB
subtask_2_33.txt TLE 2106 ms 87092 KB
subtask_2_34.txt TLE 2106 ms 87092 KB
subtask_2_35.txt TLE 2106 ms 103568 KB
subtask_2_36.txt TLE 2106 ms 103568 KB
subtask_2_37.txt TLE 2105 ms 103568 KB
subtask_2_38.txt TLE 2106 ms 103568 KB