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; }