Submission #39079357


Source Code Expand

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN=3010,MAXM=1.2e4+10,MAXL=1e7+10,LIM=1e7,mod=998244353;
ll mypow(ll a,ll n){
	if(!n)return 1;ll tmp=mypow(a,n/2);
	tmp=tmp*tmp%mod;if(n&1)tmp=tmp*a%mod;return tmp;
	return tmp;
}
ll myinv(ll a){return mypow(a,mod-2);}
void add(ll& x,ll y){x=(x+y)%mod;}
void sub(ll& x,ll y){x=(x-y+mod)%mod;}
//
ll fact[MAXL],rfact[MAXL];

void preSolve(){
	fact[0]=1;rep(i,1,LIM)fact[i]=fact[i-1]*i%mod;
	rfact[LIM]=myinv(fact[LIM]);per(i,LIM-1,0)rfact[i]=rfact[i+1]*(i+1)%mod;
}
ll C(ll n,ll m){
	if(m<0 || n<m)return 0;
	return fact[n]*rfact[m]%mod*rfact[n-m]%mod;
}
ll P(ll n){return (n%2)?(mod-1):(1);}

ll n,m,k;
ll ans;

ll sum[2][MAXN][MAXN*2]; //二维差分统计不等式解数
ll simple_sum[2][MAXN]; 

ll S(ll n,ll k){
	if(n==0)return k==0;
	//x1+x2+...+xn=k
	ll res=0;
	rep(i,0,n)if(i*(m+1)<=k){
		ll rest=k-i*(m+1),ways=C(n,i)*P(i)%mod*C(rest+n-1,n-1)%mod;
		add(res,ways);
	}
	return res;
}
ll S2[MAXM],S3[MAXM],T2[MAXM];

ll calc1(){
	ll res=0;
	rep(sum,0,min(k,4*m))if(even(sum)){
		rep(rsum,sum/2+1,sum){
			ll ways=T2[rsum]*S2[sum-rsum]%mod;
			add(res,ways);
		}
	}
	return res;
}
ll calc2(){
	ll res=0;
	rep(b,0,m)rep(d,0,b-1)if(b+d<=k){
		int c=d-b,rest=k-b-d;
		//|x1-x2| < -c 且 x1+x2 <= rest 且奇偶性固定的的方案数
		ll ways=S3[d];
		if(rest<=2*m){
			ways=ways*sum[odd((b+d))][-c-1][rest]%mod;
		}else{
			ways=ways*simple_sum[odd((b+d))][-c-1]%mod;
		}
		
		
		add(res,ways);
	}
	return res;
}
namespace GF{
	ll F[MAXL],G[MAXL];

	void pre(){	
		rep(i,0,n){
			if((m+1)*i <= k){
				add(F[(m+1)*i],1ll*C(n,i)*P(i)%mod);
			}
		}
		rep(i,2,k)add(F[i],F[i-2]);

		rep(i,0,k)G[i]=C(i+n-1,i);

		if(even(k))rep(i,0,k)add(ans,F[i]*G[k-i]%mod);
		else rep(i,0,k-1)add(ans,F[i]*G[k-i-1]%mod);
	}
}
int main(){
	preSolve();

	cin>>n>>m>>k;

	GF::pre();

	//
	rep(x1,0,m)rep(x2,0,m){
		add(sum[odd((x1+x2))][abs(x1-x2)][x1+x2],1);
		add(simple_sum[odd((x1+x2))][abs(x1-x2)],1);
	}
	rep(flag,0,1){
		rep(i,1,m)add(simple_sum[flag][i],simple_sum[flag][i-1]);

		rep(i,0,m)rep(j,0,2*m){
			if(i)add(sum[flag][i][j],sum[flag][i-1][j]);
			if(j)add(sum[flag][i][j],sum[flag][i][j-1]);
			if(i&&j)sub(sum[flag][i][j],sum[flag][i-1][j-1]);
		}
	}

	rep(i,0,min(k,4*m))S2[i]=S(n-2,i),T2[i]=S(2,i),S3[i]=S(n-3,i);
	
	sub(ans,n*calc1()%mod);

	add(ans,n*calc2()%mod);

	cout<<ans<<endl;

    return 0;
}

Submission Info

Submission Time
Task E - Non-Adjacent Matching
User Crying
Language C++ (GCC 9.2.1)
Score 800
Code Size 2835 Byte
Status AC
Exec Time 1100 ms
Memory 582920 KiB

Compile Error

./Main.cpp: In function ‘ll mypow(ll, ll)’:
./Main.cpp:17:2: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
   17 |  if(!n)return 1;ll tmp=mypow(a,n/2);
      |  ^~
./Main.cpp:17:17: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
   17 |  if(!n)return 1;ll tmp=mypow(a,n/2);
      |                 ^~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 3
AC × 50
Set Name Test Cases
Sample 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 01_small_10.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 03_large_01.txt, 03_large_02.txt, 03_large_03.txt, 03_large_04.txt, 03_large_05.txt, 03_large_06.txt, 03_large_07.txt, 03_large_08.txt, 03_large_09.txt, 03_large_10.txt, 03_large_11.txt, 03_large_12.txt, 03_large_13.txt, 03_large_14.txt, 03_large_15.txt, 03_large_16.txt, 03_large_17.txt, 03_large_18.txt, 03_large_19.txt, 03_large_20.txt, 03_large_21.txt, 03_large_22.txt, 03_large_23.txt, 04_handmade_01.txt, 04_handmade_02.txt, 04_handmade_03.txt, 04_handmade_04.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 174 ms 159744 KiB
00_sample_02.txt AC 172 ms 159748 KiB
00_sample_03.txt AC 174 ms 162176 KiB
01_small_01.txt AC 171 ms 160268 KiB
01_small_02.txt AC 171 ms 160268 KiB
01_small_03.txt AC 171 ms 159736 KiB
01_small_04.txt AC 172 ms 160356 KiB
01_small_05.txt AC 169 ms 160404 KiB
01_small_06.txt AC 174 ms 159920 KiB
01_small_07.txt AC 169 ms 159640 KiB
01_small_08.txt AC 174 ms 160700 KiB
01_small_09.txt AC 170 ms 160060 KiB
01_small_10.txt AC 171 ms 160832 KiB
02_random_01.txt AC 547 ms 313408 KiB
02_random_02.txt AC 632 ms 339476 KiB
02_random_03.txt AC 840 ms 424360 KiB
02_random_04.txt AC 517 ms 306824 KiB
02_random_05.txt AC 413 ms 261240 KiB
02_random_06.txt AC 191 ms 170296 KiB
02_random_07.txt AC 581 ms 326384 KiB
02_random_08.txt AC 231 ms 189688 KiB
02_random_09.txt AC 937 ms 466812 KiB
02_random_10.txt AC 518 ms 331640 KiB
03_large_01.txt AC 1098 ms 582636 KiB
03_large_02.txt AC 924 ms 442464 KiB
03_large_03.txt AC 1055 ms 546808 KiB
03_large_04.txt AC 1100 ms 582920 KiB
03_large_05.txt AC 613 ms 342172 KiB
03_large_06.txt AC 748 ms 383872 KiB
03_large_07.txt AC 758 ms 420044 KiB
03_large_08.txt AC 567 ms 317124 KiB
03_large_09.txt AC 722 ms 380076 KiB
03_large_10.txt AC 693 ms 384112 KiB
03_large_11.txt AC 929 ms 487528 KiB
03_large_12.txt AC 728 ms 391504 KiB
03_large_13.txt AC 651 ms 360296 KiB
03_large_14.txt AC 617 ms 374944 KiB
03_large_15.txt AC 795 ms 446536 KiB
03_large_16.txt AC 948 ms 514408 KiB
03_large_17.txt AC 794 ms 462780 KiB
03_large_18.txt AC 979 ms 530908 KiB
03_large_19.txt AC 793 ms 454684 KiB
03_large_20.txt AC 727 ms 428336 KiB
03_large_21.txt AC 889 ms 498312 KiB
03_large_22.txt AC 817 ms 477024 KiB
03_large_23.txt AC 645 ms 393568 KiB
04_handmade_01.txt AC 820 ms 441956 KiB
04_handmade_02.txt AC 170 ms 159632 KiB
04_handmade_03.txt AC 885 ms 442492 KiB
04_handmade_04.txt AC 811 ms 441956 KiB