建议加强数据(
查看原帖
建议加强数据(
59388
VinstaG173かえで楼主2020/6/2 21:35

RT,我的两份错误代码能过(

第一份:

#include<cstdio>
const int ntf=998244353;
int n,m,k,ans=1;
char s[1007][1007];
int vis[1007][1007];
int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
int dfs(int x,int y,int d)
{
	int f=0,r,c,t=0;
	vis[x][y]=1;
	for(int i=0;i<4;++i)
	{
		if(i==(d^2))continue;
		r=x+dir[i][0],c=y+dir[i][1];
		if(r<0||r==n||c<0||c==m)continue;
		if(s[r][c]=='X')continue;
		if(vis[r][c])return 0;
		if(f)return 0;
		t=dfs(r,c,i);
		if(!t)return 0;
	}
	return t+1;
}
inline int qpw(int x,int v)
{
	int r=1;
	while(v)
	{
		(v&1)&&(r=1ll*r*x%ntf);
		x=1ll*x*x%ntf;
		v>>=1;
	}
	return r;
}
int main()
{
	scanf(" %d %d %d",&n,&m,&k);
	for(int i=0;i<n;++i)scanf(" %s",s[i]);
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<m;++j)
		{
			if(s[i][j]=='X'||vis[i][j])continue;
			int q=dfs(i,j,4);
			if(q==0)
			{
				printf("0\n");
				return 0;
			}
			ans=1ll*ans*qpw(k-1,q-1)%ntf*k%ntf;
		}
	}
	printf("%d\n",ans);
	return 0;
}

没能有效判断一个座位有超过两个相邻座位的情况,在下面这组数据上是错的

Input:
2 3 3
XOX
OOO

Output:
12

Correct Output:
0

改掉这点后,第二份错误代码:

#include<cstdio>
const int ntf=998244353;
int n,m,k,ans=1;
char s[1007][1007];
int vis[1007][1007];
int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
int dfs(int x,int y,int d)
{
	int f=0,r,c,t=0;
	vis[x][y]=1;
	for(int i=0;i<4;++i)
	{
		if(i==(d^2))continue;
		r=x+dir[i][0],c=y+dir[i][1];
		if(r<0||r==n||c<0||c==m)continue;
		if(s[r][c]=='X')continue;
		if(vis[r][c])return 0;
		if(f)return 0;
		t=dfs(r,c,i);f=1;
		if(!t)return 0;
	}
	return t+1;
}
inline int qpw(int x,int v)
{
	int r=1;
	while(v)
	{
		(v&1)&&(r=1ll*r*x%ntf);
		x=1ll*x*x%ntf;
		v>>=1;
	}
	return r;
}
int main()
{
	scanf(" %d %d %d",&n,&m,&k);
	for(int i=0;i<n;++i)scanf(" %s",s[i]);
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<m;++j)
		{
			if(s[i][j]=='X'||vis[i][j])continue;
			int q=dfs(i,j,4);
			if(q==0)
			{
				printf("0\n");
				return 0;
			}
			ans=1ll*ans*qpw(k-1,q-1)%ntf*k%ntf;
		}
	}
	printf("%d\n",ans);
	return 0;
}

没有从端点开始 dfs,会在下面这组数据出错:

Input:
2 2 3
OO
OX

Output:
0

Correct Output:
12
2020/6/2 21:35
加载中...