Submission #00192


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(n);i++)
#define reps(i,n) for(int i=1;i<=(n);i++)
#define lol long long
#define SUM(n) ((n)+1)*(n)/2 //1〜nまでの総和を求める式
#define mp make_pair
#define fi first
#define se second
#define pu push_back
#define SYOU(x) fixed<<setprecision(x+1) //小数点桁数を指定する
#define abs(x,y) max(x,y)-min(x,y)
#define all(v) v.begin(),v.end()
#define UPDigit(a,b) (a+b-1)/b //小数点切り上げ
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fLL;
const int MOD=int(1e9)+7;
using namespace std;
using pii = pair<lol, lol>;
typedef vector<int> vit;
//最大公約数
lol gcd(lol x, lol y){ return (y != 0 ? gcd(y, x % y) : x); }
//最小公倍数
lol lcm(lol x, lol y){ return ((x * y) / gcd(max(x, y), min(x, y))); }
signed main(void){
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
lol x, y;
cin >> x >> y;
lol nx[5] = {}, ny[5] = {}, fib[100] ={}; //nx[1]:東 nx[2]:北 nx[3]:西 nx[4]:南
fib[0] = 1;
fib[1] = 1;
if(x == 0 && y == 0){
cout << "1\n";
return 0;
}
for(int i = 2;i <= 90;i ++){
fib[i] += fib[i - 1] + fib[i - 2];
//cout << fib[i] << '\n';
}
lol ans = 1, i = 1, j = 0;
while(true){
if(j % 4 == 0){ //東(右)に拡張する
nx[1] = nx[4] + fib[i]; //?
ny[1] = ny[2];
//cout << "1 " << nx[1] << " " << ny[1] << '\n';
if(nx[1] - fib[i] < x && x <= nx[1] && ny[1] - fib[i] < y && y <= ny[1]){
cout << ans + 1 << '\n';
return 0;
}
} else if(j % 4 == 1){ //北(上)に拡張
nx[2] = nx[3];
ny[2] = ny[1] + fib[i];//?
//cout << "2 " << nx[2] << " " << ny[2] << '\n';
if(nx[2] <= x && x < nx[2] + fib[i] && ny[2] - fib[i] < y && y <= ny[2]){
cout << ans + 1 << '\n';
return 0;
}
} else if(j % 4 == 2){ //西(左)に拡張
nx[3] = nx[2] - fib[i];//?
ny[3] = ny[4];
//cout << "3 " << nx[3] << " " << ny[3] << '\n';
if(nx[3] <= x && x < nx[3] + fib[i] && ny[3] <= y && y < ny[3] + fib[i]){
cout << ans + 1 << '\n';
return 0;
}
} else { //南(下)に拡張
nx[4] = nx[1];
ny[4] = ny[3] - fib[i];//?
//cout << "4 " << nx[4] << " " << ny[4] << '\n';
if(nx[4] - fib[i] < x && x <= nx[4] && ny[4] <= y && y < ny[4] + fib[i]){
cout << ans + 1 << '\n';
return 0;
}
}
i ++;
j ++;
ans = (ans + 1) % 3;
}
return 0;
}

ステータス

項目 データ
問題 0006 - 床
ユーザー名 ☆-(^O^)-☆
投稿日時 2020-08-17 11:31:56
言語 C++17
状態 Accepted
得点 8
ソースコード長 2515 Byte
最大実行時間 28 ms
最大メモリ使用量 784 KB

セット

セット 得点 Cases
1 ALL 8 / 8 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
in1 AC 23 ms 604 KB
1
in2 AC 23 ms 636 KB
1
in3 AC 22 ms 652 KB
1
in4 AC 21 ms 700 KB
1
in5 AC 20 ms 784 KB
1
in6 AC 21 ms 608 KB
1
in7 AC 16 ms 568 KB
1
in8 AC 28 ms 656 KB
1
in9 AC 17 ms 736 KB
1
in10 AC 25 ms 692 KB
1
in11 AC 24 ms 648 KB
1
in12 AC 22 ms 476 KB
1
in13 AC 16 ms 560 KB
1
in14 AC 18 ms 512 KB
1
in15 AC 18 ms 596 KB
1
in16 AC 27 ms 424 KB
1
in17 AC 17 ms 508 KB
1
in18 AC 25 ms 592 KB
1
in19 AC 21 ms 676 KB
1
in20 AC 16 ms 588 KB
1
in21 AC 24 ms 672 KB
1
in22 AC 18 ms 628 KB
1
in23 AC 19 ms 580 KB
1
in24 AC 23 ms 664 KB
1
in25 AC 24 ms 624 KB
1
in26 AC 17 ms 580 KB
1
in27 AC 23 ms 660 KB
1
in28 AC 20 ms 740 KB
1
in29 AC 20 ms 692 KB
1
in30 AC 27 ms 740 KB
1