社区讨论

请求帮助

P7185 [CRCI2008-2009] CIJEVI参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@m5zbstck
此快照首次捕获于
2025/01/16 20:47
去年
此快照最后确认于
2025/11/04 11:29
4 个月前
查看原帖
我明明红了#7和#10,但为什么洛谷给我过了,但显示0分(雾)
CPP
#include<bits/stdc++.h>
using namespace std;
struct st{
	char cijevi;
	int up,down,left,right;
	bool edge=0;
};
int main(){
	int r,c,mx,my,zx,zy;
	cin>>r>>c;
	st a[r+5][c+5];
	for(int i=0;i<=r+1;i++)a[i][0].edge=1,a[i][c+1].edge=1;
	for(int j=0;j<=c+1;j++)a[0][j].edge=1,a[r+1][j].edge=1;
	string tmp;
	for(int i=1;i<=r;i++){
		cin>>tmp;
		for(int j=1;j<=c;j++){
			a[i][j].cijevi=tmp[j-1];
			switch(a[i][j].cijevi){
				case '|':
					a[i][j].up=1,a[i][j].down=1,a[i-1][j].down=1,a[i+1][j].up=1;
				    break;
				case '-':
					a[i][j].left=1,a[i][j].right=1,a[i][j-1].right=1,a[i][j+1].left=1;
					break;
				case '+':
					a[i][j].up=1,a[i][j].down=1,a[i-1][j].down=1,a[i+1][j].up=1,a[i][j].left=1,a[i][j].right=1,a[i][j-1].right=1,a[i][j+1].left=1;
					break;
				case '1':
					a[i][j].right=1,a[i][j].down=1,a[i][j+1].left=1,a[i+1][j].up=1;
					break;
				case '2':
					a[i][j].right=1,a[i][j].up=1,a[i-1][j].down=1,a[i][j+1].left=1;
					break;
				case '3':
					a[i][j].up=1,a[i][j].left=1,a[i-1][j].down=1,a[i][j-1].right=1;
					break;
				case '4':
					a[i][j].left=1,a[i][j].down=1,a[i][j-1].right=1,a[i+1][j].up=1;
					break;
				case 'M':mx=i,my=j;break;
				case 'Z':zx=i,zy=j;break;
				case '.':break;
			}
		}
	}
	int n=0;
	if(a[mx][my].up!=1 and a[mx][my].down!=1 and a[mx][my].left!=1 and a[mx][my].right!=1)
	    a[mx+1][my].up=1,a[mx-1][my].down=1,a[mx][my+1].left=1,a[mx][my-1].right=1;
	if(a[zx][zy].up!=1 and a[zx][zy].down!=1 and a[zx][zy].left!=1 and a[zx][zy].right!=1)
	    a[zx+1][zy].up=1,a[zx-1][zy].down=1,a[zx][zy+1].left=1,a[zx][zy-1].right=1;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(a[i][j].cijevi=='.'){
				n==a[i][j].up+a[i][j].down+a[i][j].left+a[i][j].right;
			    if(n==4){
			    	cout<<i<<" "<<j<<" "<<'+';return 0;
				}
			    else if(a[i][j].up==1){
				    if(a[i][j].down==1){
				    	cout<<i<<" "<<j<<" "<<'|';return 0;
					}
				    else if(a[i][j].right==1){
				    	cout<<i<<" "<<j<<" "<<'2';return 0;
					}
				    else if(a[i][j].left==1){
				    	cout<<i<<" "<<j<<" "<<'3';return 0;
					}
			    }
			    else if(a[i][j].right==1){
				    if(a[i][j].left==1){
				    	cout<<i<<" "<<j<<" "<<'-';return 0;
					}
				    else if(a[i][j].down==1){
				    	cout<<i<<" "<<j<<" "<<'1';
					    return 0;
					}
			    }
			    else if(a[i][j].left==1 and a[i][j].down==1){
			    	cout<<i<<" "<<j<<" "<<'4';
			    	return 0;
				}
			}
		}
	}
}
欢迎大佬纠正错误,帮我过掉#7、#10

回复

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

正在加载回复...