Submission #737451

#TimeUsernameProblemLanguageResultExecution timeMemory
737451keisuke6Hexagonal Territory (APIO21_hexagon)C++14
0 / 100
2120 ms813952 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].push_back((i+1)*n+j); if(j != 0) G[i*n+j].push_back(i*n+j-1); if(j < n-1) G[i*n+j].push_back(i*n+j+1); if(i != 0 && j != 0) G[i*n+j].push_back((i-1)*n+(j-1)); if(i < n-1 && j < n-1) G[i*n+j].push_back((i+1)*n+(j+1)); } vector<bool> seen(n*n,false); seen[0] = true; queue<int> q; q.push(0); while(!q.empty()){ int pos = q.front(); q.pop(); for(int x:G[pos]){ if(seen[x] || s.count(x)) continue; q.push(x); seen[x] = true; } } int ans = n*n; for(bool p:seen) ans -= p; return (int)((long long)ans*A%1000000007); }
#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...