社区讨论

自制题目求spj

题目总版参与者 5已保存回复 16

讨论操作

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

当前回复
16 条
当前快照
1 份
快照标识符
@mlwdvd1y
此快照首次捕获于
2026/02/21 21:57
2 周前
此快照最后确认于
2026/02/24 11:55
2 周前
查看原帖
题目为 U658238,是的,是一道自制题目。
在最开始我打算自己给这道题加spj,但我的checker出现了很大的问题,希望哪位大佬能帮我改一下我的spj或重新造一个,感激不尽。
这个代码目前我认为是正确的题目代码,如果有需要可以用,checker和数据在题目附件中:
CPP
#include<bits/stdc++.h>
#define f(i,a,b) for(int i=a; i<b; i++)
using namespace std;
char amap[10][10];
int px, py, minstep = 114514;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
char c[4] = {'s','d','w','a'};
string stepmind = "114514";
bool inmap(int a, int b){
	return a>=0 && a<10 && b>=0 && b<10; 
}
void dfs(int x, int y, int step, string s){
	if( amap[x][y] == 'T' ){
		if( step < minstep ){
			minstep = step;
			stepmind = s;
		}
		return ;
	}
	step ++;
	amap[x][y] = '!';
	int nx = x, ny = y;
	f(i,0,4){
		nx = x;
		ny = y;
		while( amap[nx+dx[i]][ny+dy[i]]!='#' && inmap(nx+dx[i],ny+dy[i]) ){
			if( amap[nx+dx[i]][ny+dy[i]] == 'T' ){
				if( step < minstep ){
					minstep = step;
					stepmind = s+c[i];
				}
				return ;
			}
			nx = nx + dx[i];
			ny = ny + dy[i];
		}
		if(amap[nx][ny] != '!'){
            amap[nx][ny] = '!';
            dfs(nx, ny, step, s+c[i]);
            amap[nx][ny] = '.';
        }
	}
	return ;
}
int main(){
	f(i,0,10) f(j,0,10){
		cin >> amap[i][j];
		if( amap[i][j] == 'P' ){
			px = i;
			py = j;
		}
	}
	dfs(px, py, 0, "");
    if( minstep == 114514 ) cout << "NO";
	else {
		cout << stepmind;
		cout << endl << minstep;
	}
	return 0;
}

回复

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

正在加载回复...