社区讨论
自制题目求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 条回复,欢迎继续交流。
正在加载回复...