记录编号 611566 评测结果 AAAAAAAAAAAAAAAA
题目名称 [THUPC 2025 pre] 乒乓球赛 最终得分 100
用户昵称 Gravatar梦那边的原神 是否通过 通过
代码语言 C++ 运行时间 1.704 s
提交时间 2026-01-31 11:14:41 内存使用 5.07 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
const int mod=998244353;
const int N=1e5+10;
const int dlt=11;
int T,n,a[N],b[N],f[N][23],ans;
int iabs(int x){
	return x<0?-x:x;
}
void clear(){
	for(int i=0;i<=n;i++){
		for(int j=0;j<=22;j++){
			f[i][j]=0;
		}
	}	
	return;
}
bool check(int i,int j){
	j-=dlt;
	if((i-j)&1)return 1;
	int u=(i-j)/2,v=(i-j)/2+j;
	if(u>v)swap(u,v);
	if(a[i]!=-1&&b[i]!=-1){
		if(!(u==a[i]&&v==b[i]))return 1;
	}
	if(max(u,v)>=11&&iabs(j)>=2)return 1;
	return 0;
}
void work(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d %d",a+i,b+i);
		if(a[i]>b[i])swap(a[i],b[i]);
	}
	f[0][0+dlt]=1;
	for(int i=0;i<n;i++){
		for(int j=0;j<=22;j++){
			if(i&&check(i,j))continue;
			if(j!=0)(f[i+1][j-1]+=f[i][j])%=mod;
			if(j!=22)(f[i+1][j+1]+=f[i][j])%=mod;
		}
	}
	ans=0; 
	for(int j=-dlt;j<=dlt;j++){
		if((n-j)&1)continue;
		int u=(n-j)/2,v=(n-j)/2+j;
		if(u>v)swap(u,v);
		if(a[n]!=-1&&b[n]!=-1){
			if(!(u==a[n]&&v==b[n]))continue;
		}
		if(max(u,v)>=11&&iabs(j)>=2){
			(ans+=f[n][j+dlt])%=mod;
		}
	}
	printf("%d\n",ans);
	return;
}

int main(){
	freopen("thupc_2025_pre_pingpong.in","r",stdin);
	freopen("thupc_2025_pre_pingpong.out","w",stdout); 
	scanf("%d",&T);
	while(T--){
		work();
		clear();
	}
	return 0;
}