CF 615E Hexagons
テーマの大意
ぶんせき
コード#コード#
。 n
(0 ≤ n ≤ 10^18)
: http://codeforces.com/contest/615/problem/E
ぶんせき
, , 。( )
: , 。 。
コード#コード#
#include<cstdio>
#include<cmath>
long long n,x,y,i,m,t;
int main(){
scanf("%I64d",&n);
if (n==0){
printf("0 0
");
return 0;
}
m=n/3;
m=int(sqrt(m));
while (1){
t=3*m*(m+1);
if (t<=n)
break;
m--;
}
while (1){
t=3*(m+1)*(m+2);
if (t>n)
break;
m++;
}
i=m+1;
t=3*m*(m+1);
n-=t;
x=2*m;
if (n==0){
printf("%I64d 0
",x);
return 0;
}
x+=1;
y+=2;
if (n<=i){
x-=n-1;
y+=(n-1)*2;
printf("%I64d %I64d
",x,y);
return 0;
}
else {
n-=i;
x-=i-1;
y+=(i-1)*2;
}
x-=2;
if (n<=i){
x-=(n-1)*2;
printf("%I64d %I64d
",x,y);
return 0;
}
else {
n-=i;
x-=(i-1)*2;
}
x-=1;
y-=2;
if (n<=i){
x-=n-1;
y-=(n-1)*2;
printf("%I64d %I64d
",x,y);
return 0;
}
else {
n-=i;
x-=i-1;
y-=(i-1)*2;
}
x+=1;
y-=2;
if (n<=i){
x+=n-1;
y-=(n-1)*2;
printf("%I64d %I64d
",x,y);
return 0;
}
else {
n-=i;
x+=i-1;
y-=(i-1)*2;
}
x+=2;
if (n<=i){
x+=(n-1)*2;
printf("%I64d %I64d
",x,y);
return 0;
}
else {
n-=i;
x+=(i-1)*2;
}
x+=1;
y+=2;
if (n<=i){
x+=n-1;
y+=(n-1)*2;
printf("%I64d %I64d
",x,y);
return 0;
}
else {
n-=i;
x+=i-1;
y+=(i-1)*2;
}
return 0;
}