Submission #909850

#TimeUsernameProblemLanguageResultExecution timeMemory
909850Sir_Ahmed_ImranRobots (APIO13_robots)C++17
30 / 100
251 ms68380 KiB
                              ///~~~LOTA~~~///
#include <bits/stdc++.h>
using namespace std;
#define nl '\n'
#define ff first
#define ss second
#define ll long long 
#define append push_back
#define all(x) (x).begin(),(x).end()
#define pii pair<int,int>
#define N 502
#define M 10
int n,m,o;
char c[N][N];
int dp[N][N][M][M];
vector<pii> a[N][N];
void mark(int x,int y,int p,int q,int r,int s){
    if(!x || x>n || !y || y>m) return;
    if(c[x][y]=='x'){
        p=x+r;
        q=y+s;
    }
    else if(p!=x || q!=y)
        a[x][y].append({p,q});
    if(c[x][y]=='C'){
        swap(r,s);
        r=-r;
    }
    if(c[x][y]=='A'){
        swap(r,s);
        s=-s;
    }
    mark(x+r,y+s,p,q,r,s);
}
void dijkstra(int l,int r){
    int d,p,q;
    priority_queue<pair<int,pii>,vector<pair<int,pii>>,greater<pair<int,pii>>> Q;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(dp[i][j][l][r]<1e9)
                Q.push({dp[i][j][l][r],{i,j}});
    while(!Q.empty()){
        d=Q.top().ff;
        p=Q.top().ss.ff;
        q=Q.top().ss.ss;
        Q.pop();
        if(d==dp[p][q][l][r]){
            for(auto& i:a[p][q]){
                if(d+1<dp[i.ff][i.ss][l][r]){
                    dp[i.ff][i.ss][l][r]=d+1;
                    Q.push({d+1,i});
                }
            }
        }
    }
}
void solve(){
    int s;
    cin>>o>>m>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>c[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int l=1;l<=o;l++)
                for(int r=l;r<=o;r++)
                    dp[i][j][l][r]=1e9;
    for(int i=1;i<=n;i++){
        mark(i,1,i,1,0,1);
        mark(i,m,i,m,0,-1);
    }
    for(int i=1;i<=m;i++){
        mark(1,i,1,i,1,0);
        mark(n,i,n,i,-1,0);
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            s=c[i][j]-'0';
            if(s>0 && s<10)
                dp[i][j][s][s]=0;
        }
    }
    for(int i=1;i<=o;i++)
        dijkstra(i,i);
    for(int j=1;j<o;j++){
        for(int i=1;i+j<=o;i++){
            for(int p=1;p<=n;p++)
                for(int q=1;q<=m;q++)
                    for(int d=i;d<i+j;d++)
                        dp[p][q][i][i+j]=min(dp[p][q][i][i+j]
                            ,dp[p][q][i][d]+dp[p][q][d+1][i+j]);
            dijkstra(i,i+j);
        }
    }
    s=1e9;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            s=min(s,dp[i][j][1][o]);
    if(s>1e8) s=-1;
    cout<<s;
}
int main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...