社区讨论
#9 T了......
P2324[SCOI2005] 骑士精神参与者 5已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lo2daqdj
- 此快照首次捕获于
- 2023/10/23 11:58 2 年前
- 此快照最后确认于
- 2023/11/03 12:06 2 年前
实在想不到什么优化了
CPP#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
int vis=1,ans=0;
char x=getchar();
while(x<'0'||x>'9'){
if(x=='-')vis=-1;
x=getchar();
}
while(x>='0'&&x<='9'){
ans=ans*10+x-'0';
x=getchar();
}
return vis*ans;
}
inline void print(long long x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10+'0');
}
int T=read(),fx,fy,vis;
int dx[]={2,1,-1,-2,2,1,-1,-2};
int dy[]={-1,-2,-2,-1,1,2,2,1};
int ex[]={2,1,-1,-2,2,1,-1,-2};
int ey[]={-1,-2,-2,-1,1,2,2,1};
char gh[6][6]={
{'0','0','0','0','0','0'},
{'0','1','1','1','1','1'},
{'0','0','1','1','1','1'},
{'0','0','0','2','1','1'},
{'0','0','0','0','0','1'},
{'0','0','0','0','0','0'}
};
char be[6][6];
int check(){
int num=0;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(be[i][j]!=gh[i][j])num++;
}
}
return num;
}
void dfs(int x,int y,int step,int maxn){
int tmp=check();
// print(tmp),endl;
if(vis||step+tmp-1>maxn)return;
if(!tmp){
vis=1;
return;
}
for(int i=0;i<8;i++){
int xx=x+dx[i],yy=y+dy[i];
if(yy>=1&&yy<=5&&xx>=1&&yy<=5){
// dy[i]=dx[i]=0;
swap(be[xx][yy],be[x][y]);
tmp=check();
if(step+tmp<=maxn) dfs(xx,yy,step+1,maxn);
// dx[i]=ex[i],dy[i]=ey[i];
swap(be[xx][yy],be[x][y]);
}
}
}
signed main(){
while(T--){
vis=0;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>be[i][j];
if(be[i][j]=='*')be[i][j]='2',fx=i,fy=j;
}
}
for(int i=0;i<=15;i++){
dfs(fx,fy,0,i);
if(vis){
print(i),endl;
break;
}
}
if(!vis){
print(-1),endl;
}
}
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...