社区讨论

40分,求调

P3956[NOIP 2017 普及组] 棋盘参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjiivi8
此快照首次捕获于
2025/11/04 03:08
4 个月前
此快照最后确认于
2025/11/04 03:08
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,c,a[110][110],f[110][110],ax[4]= {0,1,0,-1},ay[4]= {1,0,-1,0},h,t=1,nx,ny,nc;
bool b[110][110],bb[110][110];
struct node {
	int xx,yy,tt,co;
} q[4000100];
int main() {
	memset(f,127,sizeof(f));
	cin>>m>>n;
	for(int i=1; i<=m; i++) {
		for(int j=1; j<=m; j++) {
			a[i][j]=3;
		}
	}
	for(int i=1; i<=n; i++) {
		cin>>x>>y>>c;
		a[x][y]=c;
	}
	q[1].xx=1,q[1].yy=1,q[1].tt=0,q[1].co=a[1][1],b[1][1]=1,f[1][1]=0;
	while(h<t) {
		++h;
		for(int i=0; i<4; i++) {
			nx=q[h].xx+ax[i],ny=q[h].yy+ay[i],nc=a[nx][ny];
			if(bb[q[h].xx][q[h].yy]) {
				if(nc==3) {
					continue;
					
				}
			}
			if(!b[nx][ny]&&nx>0&&ny>0&&nx<=m&&ny<=m) {
				b[nx][ny]=1;
				++t;
				if(nc==3) {
					if(q[h].tt+2<f[nx][ny]) {
						bb[nx][ny]=1;
						q[t].xx=nx,q[t].yy=ny,q[t].tt=q[h].tt+2,q[t].co=q[h].co,f[nx][ny]=q[t].tt;
					}
				} else {
					q[t].xx=nx,q[t].yy=ny,q[t].co=nc;
					if(nc!=q[h].co) {
						if(q[h].tt+1<f[nx][ny])
							q[t].tt=q[h].tt+1,f[nx][ny]=q[t].tt;
					} else {
						if(q[h].tt<f[nx][ny])
							q[t].tt=q[h].tt,f[nx][ny]=q[t].tt;
					}
				}
			}
		}
	}
	if(f[m][m]==f[0][0])cout<<-1;
	else cout<<f[m][m]; 
}

回复

2 条回复,欢迎继续交流。

正在加载回复...