#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 |
- |