样例能过但是爆0输入警钟
查看原帖
样例能过但是爆0输入警钟
1590257
Liub4554613楼主2025/2/4 11:31

样例能过但是爆0第一个测试点的数据是样例二

围观大佬警钟

洛谷读输出是不是有什么问题

修改输入之后的代码

#include<stdio.h>
#include<iostream> 
#include<cstring>
#define maxn 102

int n;
char word[maxn][maxn];
bool is[maxn][maxn];
bool ans[maxn][maxn];

int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},
{1,1},{1,-1},{-1,1},{-1,-1}};
const char* target="yizhong";


void dfs(int x,int y,int k,int dirIndex){
	//printf("%d %d %d %d\n",x,y,k,dirIndex);
	if(x<1||y<1||x>n||y>n) return;
	if(word[x][y]!=target[k]) return;
	
	int dirx=dir[dirIndex][0],diry=dir[dirIndex][1];
	if(k==6){
		for(int i=0;i<7;i++){
			ans[x-i*dirx][y-i*diry]=true;
		} 
		return; 
	}	
	dfs(x+dirx,y+diry,k+1,dirIndex);	
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			std::cin>>word[i][j];
		}
	}
//输入修改之前
//  for(int i=1;i<=n;i++){
//		for(int j=0;j<=n;j++){
//			scanf("%c",&word[i][j]);
//		}
//	}

	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(word[i][j]==target[0]){
				for(int k=0;k<8;k++){
					int finalx=i+6*dir[k][0],finalY=j+6*dir[k][1];
					if(finalx<1||finalx>n||finalY<1||finalY>n) continue;
					//printf("%d %d %d %d\n",i,j,0,k);
					dfs(i,j,0,k);
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(ans[i][j]){
				printf("%c",word[i][j]);
			}
			else{
				printf("*");
			}
		}
		printf("\n");
	}
	return 0;
} 

2025/2/4 11:31
加载中...