数据太弱,能暴力过关
查看原帖
数据太弱,能暴力过关
349824
WsW_花逝爆零人楼主2021/1/26 22:16

代码是优化后的暴力:

#include<bits/stdc++.h>
using namespace std;
bool Map[15000][15000];
int miin(int a,int b,int c,int d){
	int x=min(a,b);
	x=min(x,c);
	x=min(x,d);
	return x;
}
int main(){
	int rldu=0;
	int n,i,j,sum=0;
	scanf("%d%d%d",&n,&i,&j);
	int large=n*n;
	if(i==j){
		printf("%d",large);
		return 0;
	}
	int layer=miin(n-i,n-j,i,j);
	i-=layer-1;
	j-=layer-1;
	int v=(layer-1)*2;
	sum=large-(n-v)*(n-v);
	n-=v;
	int x=1,y=1;
	while(!(x==j&&y==i)){
		sum++;
		if(rldu==0){
			if(Map[y][x+1]>0||x+1>n){
				rldu=2;
				Map[y][x]=1;
				y++;
				continue;
			}
			Map[y][x]=1;
			x++;
			continue;
		}
		else if(rldu==1){
			if(Map[y][x-1]>0||x-1<=0){
				rldu=3;
				Map[y][x]=1;
				y--;
				continue;
			}
			Map[y][x]=1;
			x--;
			continue;
		}
		else if(rldu==2){
			if(Map[y+1][x]>0||y+1>n){
				rldu=1;
				Map[y][x]=1;
				x--;
				continue;
			}
			Map[y][x]=1;
			y++;
			continue;
		}
		else if(rldu==3){
			if(Map[y-1][x]>0||y-1<=0){
				rldu=0;
				Map[y][x]=1;
				x++;
				continue;
			}
			Map[y][x]=1;
			y--;
		}
	}
	printf("%d",sum+1);
	return 0;
}

可以如下卡掉:

30000 30000 30000
2021/1/26 22:16
加载中...