求助:13个RE+7个TLE
查看原帖
求助:13个RE+7个TLE
739315
fanyuxin12楼主2023/9/8 22:30

在在线IDE和本地运行样例正常:

在评测中出现RE:“Runtime Error.

Received signal 11: Segmentation fault with invalid memory reference.”

,评测记录:R124132835

输入:

7 13 5
1 3
4 5
5 4
6 1
2 2

输出:

443723615

源代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int is_no(int no1[],int no2[],int num){//判断所传入数是否在禁止名单的“被禁止方”内
	int* ans = find(no2,no2+k,num);
	if(ans==no2+k){
		return 0;
	}else{
		return no1[ans-no2];
	}
}
int main(){
	cin >> n >> m >>k;
	int no1[k];//禁止名单的“禁止方”
	int no2[k];//禁止名单的“被禁止方”
	int dp[m+1][n+1];//dp
	memset(no1,0,sizeof(no1));
	memset(no2,0,sizeof(no2));
	memset(dp,0,sizeof(dp));
	for(int i = 0;i<k;i++){
		cin >> no1[i] >> no2[i];
	}
	for(int i = 2;i<=n;i++){//第一次传球作特殊处理
		if(is_no(no1,no2,i)==1){
			continue;
		}
		dp[1][i]=1;
	}
	for(int i = 2;i<m;i++){//dp
		for(int j = 1;j<=n;j++){//遍历每个传球方
			if(j==1&&i==m-1){//当第m-1次传球时,任何人不应该将球传给1号
				continue;
			}
			for(int p = 1;p<=n;p++){//遍历需要加的对象
				if(is_no(no1,no2,j)==p||p==j){//排除两者都处在禁止名单内或自己传给自己
					continue;
				}
				dp[i][j]+=dp[i-1][p];//增加可能数
			}
		}
	}
	for(int i = 2;i<=n;i++){//最后一次传球仅需将除1号球员的方案数全部加起来
		if(is_no(no1,no2,1)==i){//排除某人不允许传给1号的情况
			continue;
		}
		dp[m][1]+=dp[m-1][i];
	}
	cout << dp[m][1] % 998244353;//输出答案
	return 0;
}
2023/9/8 22:30
加载中...