제출 #1162401

#제출 시각아이디문제언어결과실행 시간메모리
1162401brintonHexagonal Territory (APIO21_hexagon)C++20
0 / 100
12 ms16048 KiB
#include "hexagon.h"

#include <bits/stdc++.h>

using namespace std;
#define inf INT_MAX
#define MOD (long long)(1e9+7)
int draw_territory(int N, int A, int B,vector<int> D, vector<int> L) {
  int sumL = 200000;
  vector<vector<int>> vis(2*sumL+1);
  int x = 0,y = 0;
  int dx[6] = {0,1,1,0,-1,-1};
  int dy[6] = {1,1,0,-1,-1,0};
  int preD = -1;
  for(int i = 0;i < N;i++){
    int d = D[i]-1;
    if(d+preD == 6 && d != 3){
      vis[x+sumL].push_back(y);
    }
    preD = d;
    for(int t = 0;t < L[i];t++){
      x += dx[d];
      y += dy[d];
      vis[x+sumL].push_back(y);
    }
  }
  if(D[0] + D[N-1] == 6 && D[0] != 3){
    vis[0+sumL].push_back(0);
  }
  int ans = 0;
  for(auto v:vis){
    if(v.empty())continue;
    sort(v.begin(),v.end());
    int cur = 0;
    for(int i = 1;i < v.size();i+=2){
      ans += v[i]-v[i-1]+1;
      cur += v[i]-v[i-1]+1;
    }
    if(v.size() % 2 == 1){
      ans++;
      cur++;
    }
    // cout << cur << endl;
  }
  return (long long)ans*A%MOD;
}
#undef inf
#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...