제출 #1336265

#제출 시각아이디문제언어결과실행 시간메모리
1336265DanielPr8육각형 영역 (APIO21_hexagon)C++20
30 / 100
31 ms16164 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = __int128_t;
using vll = vector<ll>;
using vvl = vector<vll>;
using pll = pair<ll,ll>;
using vpl = vector<pll>;
using vvp = vector<vpl>;
using vi = vector<int>;
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(),v.end()
const int mod = 1e9+7;
ll calc(vpl po){
    ll ans = 0;
    for(ll i = 0; i < po.size()-1; ++i){
        ans += (po[i].f+po[i+1].f)*(po[i+1].s-po[i].s);
    }
    return abs(ans);
}

int draw_territory(int n, int a, int b, vi d, vi l) {
    ll per=0;
    ll o = l[0];
    vpl po={{0,0}};
    for(ll i = 0; i < n; ++i){
        pll nx = po.back();
        per += l[i];
        if(d[i]>3){d[i]-=3;l[i]=-l[i];}
        if(d[i]!=3)nx.f+=l[i];
        if(d[i]!=1)nx.s+=l[i];
        po.pb(nx);
    }
    ll ans = calc(po)+2+per;ans %= mod;
    ans *= a;ans %=mod;
    ans *= (mod+1)/2;ans %=mod;
    ll fir = (ans+mod)%mod;
    ll sec = o*(o+1)*(2*o+1)/6-o*(o+1)/2;sec%=mod;
    sec *= b;sec%=mod;
    sec += mod;sec%=mod;
    return (fir+sec)%mod;
}




// int main() {
//     int N, A, B;
//     assert(3 == scanf("%d %d %d", &N, &A, &B));
//     vi D(N), L(N);
//     for (int i = 0; i < N; ++i) {
//       assert(2 == scanf("%d %d", &D[i], &L[i]));
//     }
//     int result = draw_territory(N, A, B, D, L);
//     printf("%d\n", result);
//     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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...