제출 #297947

#제출 시각아이디문제언어결과실행 시간메모리
297947AutoratchAncient Books (IOI17_books)C++14
0 / 100
1 ms384 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int,pair<int,int> > const int N = 4; const int M = 24; int n; map<int,vector<int> > ma; map<vector<int>,int> mb; int res[M][N]; priority_queue<pii,vector<pii>,greater<pii> > q; bool visited[M][M]; long long minimum_walk(std::vector<int> p, int s) { n = 4; vector<int> v; for(int i = 0;i < n;i++) v.push_back(i); int cnt = 0; do { ma[cnt] = v; mb[v] = cnt; cnt++; }while(next_permutation(v.begin(),v.end())); for(int i = 0;i < M;i++) for(int j = 0;j < n;j++) res[i][j] = INT_MAX; res[mb[p]][s] = 0; q.push({0,{mb[p],s}}); while(!q.empty()) { int per = q.top().second.first,id = q.top().second.second; q.pop(); if(visited[per][id]) continue; visited[per][id] = true; vector<int> now = ma[per]; for(int i = 0;i < 4;i++) if(res[per][id]+abs(id-i)<res[per][i]) { res[per][i] = res[per][id]+abs(id-i); q.push({res[per][i],{per,i}}); } for(int i = 0;i < 4;i++) { vector<int> nx = now; swap(nx[i],nx[id]); if(res[per][id]+abs(id-i)<res[mb[nx]][i]) { res[mb[nx]][i] = res[per][id]+abs(id-i); q.push({res[mb[nx]][i],{mb[nx],i}}); } } } return res[0][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...
#Verdict Execution timeMemoryGrader output
Fetching results...