답안 #1080618

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1080618 2024-08-29T11:40:05 Z alexander707070 육각형 영역 (APIO21_hexagon) C++14
9 / 100
264 ms 604 KB
#include<bits/stdc++.h>
#define MAXN 100007
#include "hexagon.h"

using namespace std;

const long long mod=1e9+7;

int n;

long long ff(long long x){
    long long a=x-1,b=x,c=x+1;

    if(a%3==0)a/=3;
    if(b%3==0)b/=3;
    if(c%3==0)c/=3;

    return (((a*b)%mod)*c)%mod;
}

long long ak,bk,d[MAXN],len[MAXN],xx,yy,ans;

long long calc(long long r1,long long r2,long long c1,long long c2){
    if(r1>r2)swap(r1,r2);

    /*if(r1%2==0 and r2%2==1){
        r1/=2; r2/=2;
        return (r2*(r2+1) - r1*(r1-1));
    }

    if(r1%2==0 and r2%2==0){
        r1/=2; r2/=2;
        return (r2*(r2+1) - r1*(r1-1) - r2);
    }

    if(r1%2==1 and r2%2==1){
        r1/=2; r2/=2;
        return (r2*(r2+1) - r1*(r1-1) - r1);
    }

    if(r1%2==1 and r2%2==0){
        r1/=2; r2/=2;
        return (r2*(r2+1) - r1*(r1-1) -r1 - r2);
    }*/

    long long res=0;
    for(long long s=r1;s<=r2;s++){
        res+=s/2;
    }

    return res;
}

int draw_territory(int N,int A,int B,vector<int> D,vector<int> L){
    n=N; ak=A; bk=B;

    for(int i=1;i<=n;i++){
        d[i]=D[i-1]; len[i]=L[i-1];
    }

    if(n==3){
        return ((ak*(((len[1]+1)*(len[1]+2)/2)%mod) )%mod + (bk*ff(len[1]+1))%mod)%mod ;
    }

    if(B==0){
        xx=5*mod; yy=5*mod;

        d[n+1]=d[1];
        for(int i=1;i<=n;i++){
            if(d[i]==1)xx+=2*len[i];
            if(d[i]==4)xx-=2*len[i];

            if(d[i]==2){
                if(d[i+1]!=2 and d[i+1]!=3)ans+=calc(xx,xx+len[i],yy,yy+len[i]);
                else ans+=calc(xx,xx+len[i]-1,yy,yy+len[i]-1);

                xx+=len[i]; yy+=len[i];
            }
            if(d[i]==3){
                if(d[i+1]!=2 and d[i+1]!=3)ans+=calc(xx,xx-len[i],yy,yy+len[i]);
                else ans+=calc(xx,xx-len[i]+1,yy,yy+len[i]-1);

                xx-=len[i]; yy+=len[i];
            }


            if(d[i]==6){
                if(d[i+1]!=6 and d[i+1]!=5)ans-=calc(xx-2,xx+len[i]-2,yy,yy-len[i]);
                else ans-=calc(xx-2,xx+len[i]-1-2,yy,yy-len[i]+1);

                xx+=len[i]; yy-=len[i];
            }
            if(d[i]==5){
                if(d[i+1]!=6 or d[i+1]!=5)ans-=calc(xx-2,xx-len[i]-2,yy,yy-len[i]);
                else ans-=calc(xx-2,xx-len[i]+1-2,yy,yy-len[i]+1);

                xx-=len[i]; yy-=len[i];
            }     
        }

        return abs(ans)%mod;
    }
}

/*int main(){
    cout<<draw_territory(3,2,0,{2,4,6},{3,3,3})<<"\n";
}*/

Compilation message

hexagon.cpp: In function 'int draw_territory(int, int, int, std::vector<int>, std::vector<int>)':
hexagon.cpp:103:1: warning: control reaches end of non-void function [-Wreturn-type]
  103 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 444 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 264 ms 348 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -