Submission #737474

#TimeUsernameProblemLanguageResultExecution timeMemory
737474keisuke6Hexagonal Territory (APIO21_hexagon)C++14
0 / 100
2113 ms961604 KiB
#include "hexagon.h" #include <vector> #include <unordered_set> #include <queue> long long mod = 1000000007; using namespace std; int draw_territory(int N, int A, int B, std::vector<int> D, std::vector<int> L){ int n = 2500; vector<vector<int>> G(n*n); int pos = 1200*n+1200; unordered_set<int> s; vector<int> C = {0,n,n+1,1,-n,-n-1,-1}; for(int i=0;i<N;i++){ for(int j=0;j<L[i];j++){ pos += C[D[i]]; s.insert(pos); } } for(int i=0;i<n;i++)for(int j=0;j<n;j++){ if(i != 0) G[i*n+j].push_back((i-1)*n+j); if(i < n-1) G[i*n+j].emplace_back((i+1)*n+j); if(j != 0) G[i*n+j].emplace_back(i*n+j-1); if(j < n-1) G[i*n+j].emplace_back(i*n+j+1); if(i != 0 && j != 0) G[i*n+j].emplace_back((i-1)*n+(j-1)); if(i < n-1 && j < n-1) G[i*n+j].emplace_back((i+1)*n+(j+1)); } vector<int> dist(n*n,1e9); vector<bool> seen(n*n,false); seen[0] = true; dist[pos] = 0; queue<int> q; q.push(0); while(!q.empty()){ int po = q.front(); q.pop(); for(int x:G[po]){ if(seen[x] == true || s.count(x)) continue; q.push(x); seen[x] = true; } } q.push(pos); while(!q.empty()){ int po = q.front(); q.pop(); for(int x:G[po]){ if(dist[x] != 1e9 || seen[x]) continue; q.push(x); dist[x] = dist[po] + 1; } } long long ans = 0; for(int x:dist){ if(seen[x]) continue; ans += B*x; if(x) ans += A; ans %= mod; } return (int)(ans%mod); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...