社区讨论

为什么这个玄学代码能A

P2324[SCOI2005] 骑士精神参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mhjd04e7
此快照首次捕获于
2025/11/04 00:33
4 个月前
此快照最后确认于
2025/11/04 00:33
4 个月前
查看原帖
rt 是数据太水了吗
CPP
#include<numeric>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<stdio.h>
#include<cstring>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<cstdlib>
#include<stdlib.h>
#include<ctime>
#include<time.h>
#include<functional>
#include <unordered_map>
//#define int long long
#define Top() front()
#define cint const int
#define op operator
#define N 10005
#define M 105
#define P 20140921
using namespace std;
int T;
int goal[5][5]={
    {1,1,1,1,1},
    {0,1,1,1,1},
    {0,0,2,1,1},
    {0,0,0,0,1},
    {0,0,0,0,0}
};
int mp[5][5],sx,sy;
int rx[]={1,-1,2,-2,1,-1,2,-2};
int ry[]={2,-2,1,-1,-2,2,-1,1};
int Check(int x,int y){
    return x>=0&&x<=4&&y>=0&&y<=4;
}
int H(){
    int res=0;
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            res+=(mp[i][j]!=goal[i][j]);
        }
    }
    return res;
}
int IDA(int left,int x,int y){
    int h=H();
    if(!h)return 1;
    if(h>left)return 0;
    for(int i=0;i<8;i++){
        int p=x+rx[i],q=y+ry[i];
        if(Check(p,q)){
            swap(mp[x][y],mp[p][q]);
            if(IDA(left-1,p,q))return 1;
            swap(mp[x][y],mp[p][q]);
        }
    }
    return 0;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    srand((unsigned)time(NULL));
    cin>>T;
    while(T--){
        for(int i=0;i<5;i++){
            string s;
            cin>>s;
            for(int j=0;j<5;j++){
                if(s[j]=='0')mp[i][j]=0;
                if(s[j]=='1')mp[i][j]=1;
                if(s[j]=='*'){
                    mp[i][j]=2;
                    sx=i;
                    sy=j;
                }
            }
        }
        int ans=0;
        for(int i=0;i<=16;i++){
            if(IDA(i,sx,sy)){ans=i;break;}
        }
        cout<<ans-1<<"\n";
    }
    return 0;
}


回复

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

正在加载回复...