Problem Statement
To describe the moves easily, we will now introduce a coordinate system. Each cell of the chessboard can be described using two integers (r,c): its row number and its column number. Now, if we have a piece at (r,c), the move (x,y) takes the piece to the cell (r+x,c+y).
The new chess piece will be called an (a,b)-hyperknight. The hyperknight always has 8 possible moves: (+a,+b), (+a,-b), (-a,+b), (-a,-b), (+b,+a), (+b,-a), (-b,+a), and (-b,-a). Note that the original chess knight is a (2,1)-hyperknight.
Of course, as the chessboard is finite, it is not always possible to make each of the 8 moves. Some of them may cause our hyperknight to leave the chessboard. A move is called valid if the destination cell is on the chessboard. Fernando would like to know the number of cells on his board such that his hyperknight will have exactly k valid moves from that cell.
You are given the
Definition
- Class:
- HyperKnight
- Method:
- countCells
- Parameters:
- int, int, int, int, int
- Returns:
- long
- Method signature:
- long countCells(int a, int b, int numRows, int numColumns, int k)
- (be sure your method is public)
Notes
- If you wish, you may assume that the rows are numbered 0 through numRows-1 and columns 0 through numColumns-1. However, note that the actual row/column numbers do not matter, as long as they are consecutive.
Constraints
- a will be between 1 and 1,000,000,000 (10^9), inclusive.
- b will be between 1 and 1,000,000,000 (10^9), inclusive.
- a will not be equal to b.
- numRows will be between 1 and 1,000,000,000 (10^9), inclusive.
- numColumns will be between 1 and 1,000,000,000 (10^9), inclusive.
- 2*max(a,b) will be strictly less than min(numRows,numColumns).
- k will be between 0 and 8, inclusive.
Examples
2
1
8
8
4
Returns: 20
This is a standard chessboard. We have a traditional chess knight and we are looking for cells such that the knight has exactly 4 valid moves.
3
2
8
8
2
Returns: 16
1
3
7
11
0
Returns: 0
3
2
10
20
8
Returns: 56
1
4
100
10
6
Returns: 564
2
3
1000000000
1000000000
8
Returns: 999999988000000036
2
3
7
7
1
Returns: 0
2
3
7
7
2
Returns: 16
2
3
7
7
3
Returns: 16
2
3
7
7
4
Returns: 12
2
3
7
7
5
Returns: 0
2
3
7
7
6
Returns: 4
2
3
7
7
7
Returns: 0
2
3
7
7
8
Returns: 1
499999998
499999999
1000000000
1000000000
0
Returns: 0
499999998
499999999
1000000000
1000000000
1
Returns: 0
499999998
499999999
1000000000
1000000000
2
Returns: 999999992000000016
499999998
499999999
1000000000
1000000000
3
Returns: 3999999984
499999998
499999999
1000000000
1000000000
4
Returns: 3999999988
499999998
499999999
1000000000
1000000000
5
Returns: 0
499999998
499999999
1000000000
1000000000
6
Returns: 8
499999998
499999999
1000000000
1000000000
7
Returns: 0
499999998
499999999
1000000000
1000000000
8
Returns: 4
2
1
20001
1000000000
0
Returns: 0
2
1
20001
1000000000
1
Returns: 0
2
1
20001
1000000000
2
Returns: 4
2
1
20001
1000000000
3
Returns: 8
2
1
20001
1000000000
4
Returns: 2000039990
2
1
20001
1000000000
5
Returns: 0
2
1
20001
1000000000
6
Returns: 2000039986
2
1
20001
1000000000
7
Returns: 0
2
1
20001
1000000000
8
Returns: 19996999920012
10000
5000
20001
1000000000
0
Returns: 0
10000
5000
20001
1000000000
1
Returns: 0
10000
5000
20001
1000000000
2
Returns: 100000000
10000
5000
20001
1000000000
3
Returns: 200000000
10000
5000
20001
1000000000
4
Returns: 9999900010000
10000
5000
20001
1000000000
5
Returns: 0
10000
5000
20001
1000000000
6
Returns: 9999800010000
10000
5000
20001
1000000000
7
Returns: 0
10000
5000
20001
1000000000
8
Returns: 999980000
1
2
1000000000
1000000000
0
Returns: 0
1
2
1000000000
1000000000
1
Returns: 0
1
2
1000000000
1000000000
2
Returns: 4
1
2
1000000000
1000000000
3
Returns: 8
1
2
1000000000
1000000000
4
Returns: 3999999988
1
2
1000000000
1000000000
5
Returns: 0
1
2
1000000000
1000000000
6
Returns: 3999999984
1
2
1000000000
1000000000
7
Returns: 0
1
2
1000000000
1000000000
8
Returns: 999999992000000016
1
2
1000000000
5
0
Returns: 0
1
2
1000000000
5
1
Returns: 0
1
2
1000000000
5
2
Returns: 4
1
2
1000000000
5
3
Returns: 8
1
2
1000000000
5
4
Returns: 1999999998
1
2
1000000000
5
5
Returns: 0
1
2
1000000000
5
6
Returns: 1999999994
1
2
1000000000
5
7
Returns: 0
1
2
1000000000
5
8
Returns: 999999996
499999999
1
1000000000
1000000000
0
Returns: 0
499999999
1
1000000000
1000000000
1
Returns: 0
499999999
1
1000000000
1000000000
2
Returns: 4
499999999
1
1000000000
1000000000
3
Returns: 3999999984
499999999
1
1000000000
1000000000
4
Returns: 999999992000000024
499999999
1
1000000000
1000000000
5
Returns: 0
499999999
1
1000000000
1000000000
6
Returns: 3999999984
499999999
1
1000000000
1000000000
7
Returns: 0
499999999
1
1000000000
1000000000
8
Returns: 4
19205425
29027233
79816846
73398506
2
Returns: 1475393397722500
19205425
29027233
79816846
73398506
3
Returns: 1509055975267200
19205425
29027233
79816846
73398506
4
Returns: 1811160782212456
19205425
29027233
79816846
73398506
6
Returns: 728904265614720
19205425
29027233
79816846
73398506
8
Returns: 333922829215200
36411905
49189985
123331332
139724323
2
Returns: 5303307302916100
36411905
49189985
123331332
139724323
3
Returns: 3722193880339200
36411905
49189985
123331332
139724323
4
Returns: 5481023866919750
36411905
49189985
123331332
139724323
6
Returns: 1694263899854400
36411905
49189985
123331332
139724323
8
Returns: 1031597918358786
37909854
42557194
128417691
92857213
2
Returns: 5748628121205264
37909854
42557194
128417691
92857213
3
Returns: 1409439847106880
37909854
42557194
128417691
92857213
4
Returns: 3956693595793024
5347410
33895789
74759886
97588821
8
Returns: 207636366774844
42207223
39173184
115662001
97975491
4
Returns: 3547412635778884
42207223
39173184
115662001
97975491
6
Returns: 271902079870800
42207223
39173184
115662001
97975491
8
Returns: 423749499494975
6654070
1356936
57822120
24685929
2
Returns: 7365101232384
6654070
1356936
57822120
24685929
3
Returns: 57502974571392
26174793
2712259
85355565
96339217
3
Returns: 509091752034448
26174793
2712259
85355565
96339217
4
Returns: 2619626079170604
26174793
2712259
85355565
96339217
6
Returns: 3613024234951480
26174793
2712259
85355565
96339217
8
Returns: 1451920837003749
38549418
49711042
144624062
105034741
2
Returns: 5944230512554896
38549418
49711042
144624062
105034741
8
Returns: 253703198235546
39483358
9722546
123397642
96761518
2
Returns: 378111602888464
39483358
9722546
123397642
96761518
6
Returns: 3703776385142272
39483358
9722546
123397642
96761518
8
Returns: 790639530846652
35834099
7025192
73801792
89315676
2
Returns: 197413290547456
35834099
7025192
73801792
89315676
8
Returns: 37652553175932
4781822
9360408
54482604
24850751
2
Returns: 91463286558736
4781822
9360408
54482604
24850751
3
Returns: 175151866109536
4781822
9360408
54482604
24850751
4
Returns: 484491324356196
43521866
5243715
101731108
129509489
3
Returns: 1605757716567720
43521866
5243715
101731108
129509489
4
Returns: 6460256857533394
43521866
5243715
101731108
129509489
6
Returns: 4375432510194166
43521866
5243715
101731108
129509489
8
Returns: 623710540183632
11098020
36554824
107799910
74593434
2
Returns: 492664191681600
11098020
36554824
107799910
74593434
3
Returns: 2260160959424640
11098020
36554824
107799910
74593434
4
Returns: 3395116095947584
11098020
36554824
107799910
74593434
6
Returns: 1841751299645184
18607318
20353033
58228002
54010191
3
Returns: 259864593138960
18607318
20353033
58228002
54010191
4
Returns: 1159370722873696
18607318
20353033
58228002
54010191
6
Returns: 107627034157230
18607318
20353033
58228002
54010191
8
Returns: 233114026786000
43265408
3290218
90125504
103363137
4
Returns: 6526481887540324
43265408
3290218
90125504
103363137
6
Returns: 1633147131813420
43265408
3290218
90125504
103363137
8
Returns: 60506942310848
22620589
11861535
67151929
50577031
2
Returns: 562784050224900
22620589
11861535
67151929
50577031
3
Returns: 1020951164703120
22620589
11861535
67151929
50577031
4
Returns: 1109402065853944
22620589
11861535
67151929
50577031
6
Returns: 586295367505232
22620589
11861535
67151929
50577031
8
Returns: 116912546455603
1
2
5
5
0
Returns: 0
1
2
5
5
1
Returns: 0
1
2
5
5
2
Returns: 4
1
2
5
5
3
Returns: 8
1
2
5
5
4
Returns: 8
1
2
5
5
5
Returns: 0
1
2
5
5
6
Returns: 4
1
2
5
5
7
Returns: 0
1
2
5
5
8
Returns: 1
3000013
5000017
987654321
123456789
3
Returns: 48000304000416
4
2
100
500
3
Returns: 32
1
2
8
8
3
Returns: 8
2
1
8
8
3
Returns: 8
3
1
8
8
3
Returns: 16
156
178
100000000
100000000
4
Returns: 62399779792
2
3
1000000000
1000000000
3
Returns: 16
2
1
1000000000
1000000000
8
Returns: 999999992000000016
111111
1111111
1000000000
1000000000
3
Returns: 888888000000
2
1
100
100
3
Returns: 8
2
3
1000000000
1000000000
4
Returns: 7999999956
2
1
5
5
3
Returns: 8
5
99
1000
1000
3
Returns: 3760
4
2
1000
1000
3
Returns: 32
3
2
8
8
3
Returns: 16
10
8
100
100
4
Returns: 2576
50
40
200
200
3
Returns: 3200
1
2
1000
1000
8
Returns: 992016
10
7
10000
10000
3
Returns: 168
19
57
200
312
3
Returns: 5776
600000
500000
1000000000
1000000000
3
Returns: 400000000000
2
1
100000
100000
3
Returns: 8
499999999
499999998
1000000000
1000000000
3
Returns: 3999999984
5
3
10000
10000
3
Returns: 48
3
1
7
7
5
Returns: 0
11
234
10000
20000
3
Returns: 19624
1000
1200
100000
120000
3
Returns: 1600000
2
3
8
8
3
Returns: 16
3
5
100
100
4
Returns: 1096
5
70
1000000000
1000000000
6
Returns: 259999963600
10
30
100
1000
3
Returns: 1600
499999998
499999990
1000000000
1000000000
2
Returns: 999999960000000400
2
1
1000000000
1000000000
4
Returns: 3999999988
26
16
567
123
5
Returns: 0
1
2
10
10
3
Returns: 8
2
1
10
10
3
Returns: 8
99999999
999999
1000000000
1000000000
4
Returns: 42403996807999992
23
4
2542
5463
3
Returns: 608
1
3
7
7
3
Returns: 16
99
100
100000
100000
2
Returns: 39204
400000000
200000000
1000000000
1000000000
3
Returns: 320000000000000000
1
3
1000000000
1000000000
4
Returns: 3999999992
4
3
14
15
3
Returns: 24
10
20
100
100
3
Returns: 800
49999999
50000000
100000003
100000007
4
Returns: 999999984