Submission #49017025


Source Code Expand

// LUOGU_RID: 141880574
#include<bits/stdc++.h>
#include<atcoder/modint>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef atcoder::modint998244353 mint;

#define rep(i,l,r) for(int i(l);i<=(r);++i)
#define per(i,r,l) for(int i(r);i>=(l);--i)
#define eb emplace_back
#define File(filename) freopen(filename ".in","r",stdin),freopen(filename ".out","w",stdout)

#ifdef EXODUS
	#define Debug(...) fprintf(stderr,__VA_ARGS__)
#else
	#define Debug(...) 0
#endif

//=========================================================================================================
// Something about IO

template<typename T>
void read(T &x){
	x=0;T flg=1;
	char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')flg=-1;ch=getchar();}
	while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	x*=flg;
}
template<typename T,typename... Args>
void read(T &x,Args &...args){read(x),read(args...);}

//=========================================================================================================
// Define the global variables here.

bool membg=0;

constexpr int N=3e3+7;
int n,m,S;
mint fac[N*N],ifac[N*N],f[N*N];
int sum[2][N<<1][N];

bool memed=0;

//=========================================================================================================
// Code here.

mint binom(int x,int y){return (x<0||y<0||x<y)?mint(0):fac[x]*ifac[y]*ifac[x-y];}

void solve(){
	fac[0]=1;
	for(int i=1;i<N*N;i++)fac[i]=fac[i-1]*i;
	ifac[N*N-1]=1/fac[N*N-1];
	for(int i=N*N-2;i>=0;i--)ifac[i]=ifac[i+1]*(i+1);
	read(n,m,S);S=(S>>1)<<1;
	for(int i=0;i<=n;i++)f[i*(m+1)]=(i&1?-1:1)*binom(n,i);
	for(int i=2;i<=S;i++)f[i]+=f[i-2];
	for(int i=0;i<=m;i++)
		for(int j=0;j<=m;j++)
			sum[(i+j)&1][i+j][abs(i-j)]++;
	for(auto x:{0,1}){
		for(int i=0;i<=2*m;i++)for(int j=1;j<=m;j++)sum[x][i][j]+=sum[x][i][j-1];
		for(int j=0;j<=m;j++)for(int i=1;i<=2*m;i++)sum[x][i][j]+=sum[x][i-1][j];
	}
	mint ans[3]={0,0,0};
	//---------------------------------------------------------------------------------------------------------
	// calculate no condition
	for(int i=0;i<=S;i++)ans[0]+=f[S-i]*binom(i+n-1,n-1);
	//---------------------------------------------------------------------------------------------------------
	// calculate one condition
	for(int s=0;s<=2*m;s++){
		mint coef=binom(s+n-3,n-3)-(n-2)*binom(s-m-1+n-3,n-3);
		for(int i=s+2,l,r;i<=2*m&&s+i<=S;i+=2)l=max(0,i-m),r=min(m,i),ans[1]+=max(0,r-l+1)*coef;
	}
	//---------------------------------------------------------------------------------------------------------
	// calculate two condition
	for(int s=0;s<=m;s++){
		mint coef=binom(s+n-4,n-4);
		for(int i=s+1;i<=m&&s+i<=S;i++)
			ans[2]+=coef*sum[(s+i)&1][min(m+m,S-s-i)][i-s-1];
	}
	// printf("%d %d %d\n",ans[0].val(),ans[1].val(),ans[2].val());
	printf("%d\n",(ans[0]-n*ans[1]+n*ans[2]).val());
	return;
}


//=========================================================================================================

int main(){
	Debug("%.3lfMB\n",fabs(&memed-&membg)/1024.0/1024.0);
	int timbg=clock();
	int T=1;
	while(T--)solve();
	int timed=clock();
	Debug("%.3lfs\n",1.0*(timed-timbg)/CLOCKS_PER_SEC);
	fflush(stdout);
	return 0;
}

Submission Info

Submission Time
Task E - Non-Adjacent Matching
User EXODUS
Language C++ 20 (gcc 12.2)
Score 800
Code Size 3309 Byte
Status AC
Exec Time 649 ms
Memory 250820 KiB

Compile Error

Main.cpp: In function ‘int main()’:
Main.cpp:20:28: warning: statement has no effect [-Wunused-value]
   20 |         #define Debug(...) 0
      |                            ^
Main.cpp:95:9: note: in expansion of macro ‘Debug’
   95 |         Debug("%.3lfMB\n",fabs(&memed-&membg)/1024.0/1024.0);
      |         ^~~~~
Main.cpp:20:28: warning: statement has no effect [-Wunused-value]
   20 |         #define Debug(...) 0
      |                            ^
Main.cpp:100:9: note: in expansion of macro ‘Debug’
  100 |         Debug("%.3lfs\n",1.0*(timed-timbg)/CLOCKS_PER_SEC);
      |         ^~~~~
Main.cpp:96:13: warning: unused variable ‘timbg’ [-Wunused-variable]
   96 |         int timbg=clock();
      |             ^~~~~
Main.cpp:99:13: warning: unused variable ‘timed’ [-Wunused-variable]
   99 |         int timed=clock();
      |             ^~~~~

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 108 ms 109768 KiB
00_sample_02.txt AC 108 ms 109828 KiB
00_sample_03.txt AC 110 ms 112540 KiB
01_small_01.txt AC 109 ms 110608 KiB
01_small_02.txt AC 109 ms 110648 KiB
01_small_03.txt AC 108 ms 109876 KiB
01_small_04.txt AC 109 ms 110576 KiB
01_small_05.txt AC 108 ms 111200 KiB
01_small_06.txt AC 108 ms 110028 KiB
01_small_07.txt AC 108 ms 109836 KiB
01_small_08.txt AC 109 ms 111472 KiB
01_small_09.txt AC 110 ms 110224 KiB
01_small_10.txt AC 109 ms 111564 KiB
02_random_01.txt AC 356 ms 208132 KiB
02_random_02.txt AC 400 ms 216620 KiB
02_random_03.txt AC 518 ms 242000 KiB
02_random_04.txt AC 337 ms 205772 KiB
02_random_05.txt AC 263 ms 180680 KiB
02_random_06.txt AC 114 ms 116984 KiB
02_random_07.txt AC 348 ms 207764 KiB
02_random_08.txt AC 127 ms 125804 KiB
02_random_09.txt AC 583 ms 247088 KiB
02_random_10.txt AC 298 ms 187836 KiB
03_large_01.txt AC 649 ms 250576 KiB
03_large_02.txt AC 595 ms 250624 KiB
03_large_03.txt AC 637 ms 250792 KiB
03_large_04.txt AC 649 ms 250672 KiB
03_large_05.txt AC 400 ms 217296 KiB
03_large_06.txt AC 481 ms 229752 KiB
03_large_07.txt AC 494 ms 239744 KiB
03_large_08.txt AC 364 ms 209224 KiB
03_large_09.txt AC 456 ms 228508 KiB
03_large_10.txt AC 431 ms 222348 KiB
03_large_11.txt AC 569 ms 243104 KiB
03_large_12.txt AC 457 ms 227816 KiB
03_large_13.txt AC 395 ms 216208 KiB
03_large_14.txt AC 360 ms 205780 KiB
03_large_15.txt AC 479 ms 228012 KiB
03_large_16.txt AC 576 ms 242612 KiB
03_large_17.txt AC 456 ms 221488 KiB
03_large_18.txt AC 585 ms 243332 KiB
03_large_19.txt AC 476 ms 226576 KiB
03_large_20.txt AC 436 ms 219744 KiB
03_large_21.txt AC 521 ms 233004 KiB
03_large_22.txt AC 478 ms 225028 KiB
03_large_23.txt AC 378 ms 209020 KiB
04_handmade_01.txt AC 552 ms 250820 KiB
04_handmade_02.txt AC 108 ms 109592 KiB
04_handmade_03.txt AC 594 ms 250732 KiB
04_handmade_04.txt AC 550 ms 250668 KiB