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...