样例全对但上机20分!
查看原帖
样例全对但上机20分!
1021055
gdz0214_and_zxb0214楼主2024/9/26 22:21

这是神马鬼

样例全对但上机20分!?

qwq求调

#include<bits/stdc++.h>
using namespace std;
int n,m[101][101],dp[8][2]={{1,1},{1,0},{1,-1},{0,1},{0,-1},{-1,1},{-1,0},{-1,-1}},vis[101][101]={};
int find(int i,int j,int n,int found){
	if(n==7){
		vis[i][j]=1;
		return 1;
	}
	int flag=0;
	if(n==1){
		for(int k=0;k<8;k++){
			int di=i+dp[k][0];
			int dj=j+dp[k][1];
			if(m[di][dj]==n+1){
				if(find(di,dj,n+1,k)==1){
					vis[di][dj]=1;
					flag=1;
				}
			}
		}
	}else{
		int di=i+dp[found][0];
		int dj=j+dp[found][1];
		if(m[di][dj]==n+1){
			if(find(di,dj,n+1,found)==1){
				vis[di][dj]=1;
				flag=1;
			}
		}else{
			return 0;
		}
	}
	if(flag){
		vis[i][j]=1;
		return 1;
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			char s;
			cin>>s;
			switch(s){
				case 'y':m[i][j]=1;break;
				case 'i':m[i][j]=2;break;
				case 'z':m[i][j]=3;break;
				case 'h':m[i][j]=4;break;
				case 'o':m[i][j]=5;break;
				case 'n':m[i][j]=6;break;
				case 'g':m[i][j]=7;break;
				default:m[i][j]=0;break;
			}
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(m[i][j]==1){
				find(i,j,1,0);
			}
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(vis[i][j]){
				switch(m[i][j]){
					case 1:cout<<"y";break;
					case 2:cout<<"i";break;
					case 3:cout<<"z";break;
					case 4:cout<<"h";break;
					case 5:cout<<"o";break;
					case 6:cout<<"n";break;
					case 7:cout<<"g";break;
				}
			}else{
				cout<<"*";
			}
		}
		if(i==n-1){
			return 0;
		}
		cout<<"\n";
	}
	return 0;
}

T^T感谢大佬T^T

2024/9/26 22:21
加载中...