Problem Statement
- Each fox enters the corridor at position 0.
- After some fox steps at position i, he will step at either position i+1 or position i+2 next.
- Each fox leaves the corridor at position n+1.
Fox Ciel got interested in the number of foxes that pass through the corridor. She got n counters and placed them on positions 1 through n. Initially, each of those counters was set to zero. Each time a fox steps on a position, the particular counter is incremented. Unfortunately, the counters can only store integers from 0 to M-1 and therefore they are counting modulo M. In other words, after M foxes step on a particular position, the corresponding counter will show zero again.
You are given a
Definition
- Class:
- ModuloCounters
- Method:
- minFoxes
- Parameters:
- long, long[]
- Returns:
- long
- Method signature:
- long minFoxes(long M, long[] counter)
- (be sure your method is public)
Notes
- The answer will always fit into a signed 64bit integer.
Constraints
- M will be between 2 and 10^12, inclusive.
- counter will contain between 1 and 50 elements, inclusive.
- Each element of counter will be between 0 and M-1, inclusive.
Examples
10
{0, 0, 1}
Returns: 10
There could have been 10 foxes. Out of those, nine stepped on positions 0, 2, 4, and one stepped on positions 0, 2, 3, 4. Note that all 10 foxes stepped on position 2, which is consistent with the counter showing 0. There is no way to reach the given state of counters with fewer than 10 foxes.
1000000000000
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Returns: 0
1000000000000
{0}
Returns: 0
2
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Returns: 0
2
{0}
Returns: 0
1000000000000
{999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999}
Returns: 999999999999
1000000000000
{999999999999}
Returns: 999999999999
2
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
Returns: 1
2
{1}
Returns: 1
1000000000000
{714927236767, 322605372417, 371599578113, 671709776944, 105543406165, 232637584006, 328585316077, 263879420596, 737807178597, 891395617504, 186712060926, 403908537324, 698815542220, 741044291908, 787722284561, 947275471876, 551479523416, 553414046639, 352858111984, 482302273383, 445303744865, 246218537253, 417394660629, 750143161953, 934588425003, 209851822158, 333330745266, 912098916516, 939625061335, 524974369410, 323926839934, 893073187959, 603488861735, 784918144852, 616746814080, 360692036068, 582088011886, 928835574495, 833550681620, 707428190542, 734003682224, 441155168311, 689697989532, 817019553070, 272598542855, 353861026180, 664380480431, 757015277865, 518110668714, 568384772089}
Returns: 1833550681620
1000000000000
{133215206740, 266288511510, 448393785671, 440968550160, 416574340395, 321372081525, 288771501582, 245316779800, 211975701759, 384110709107, 156410313647, 128998879464, 430685096451, 266088859692, 274882494933, 124812321774, 200387147287, 160090197731, 339372487439, 275493821335, 326440606633, 429112788045, 329552838503, 144339103097, 264177422540, 438593624155, 204042207942, 366332342745, 144186434709, 186302686290, 290911411655, 456834552915, 323621907697, 352097275822, 384126553312, 449742932197, 368703007036, 200931100290, 415349245683, 391129253837, 444818266652, 328089664003, 261369708328, 228268044372, 263231212512, 202911362459, 299785011842, 264326337478, 395938515340, 206207133214}
Returns: 1440968550160
1000000000000
{722237197277, 664366967577, 735969253813, 596643696166, 655771757577, 647461586356, 707685215908, 768583316256, 597250739169, 576787968682, 757200134846, 795243069411, 745172375306, 812285511601, 643494216890, 776153773974, 624334543874, 839850881482, 826297385248, 823864999988, 595239134493, 672432075515, 707865873664, 862229927547, 750753604814, 659775724504, 631808690120, 616817317412, 736026676598, 728329886832, 783510183468, 696359532685, 806154133977, 745279226026, 654501515995, 592440001375, 862431815258, 600464199592, 575151198373, 704791914993, 638370221747, 628974553754, 689644404845, 692751069671, 649432269822, 841482417234, 601998360823, 789369372071, 699994516945, 833641657818}
Returns: 862431815258
1000000000000
{184771928137, 187308541614, 185286382516, 186237798513, 188605091409, 173292886681, 173526690230, 188320360487, 173847418885, 182633218955, 186033048918, 172034695966, 173423569677, 188841434734, 184832664165, 172400032505, 176127733194, 183028431384, 185525844424, 179915437857, 187465962161, 185462654424, 172243760532, 180014942353, 188179454987, 175179456165, 177692785844, 178896164184, 172156341597, 179123685600, 186432272335, 184492245692, 184484166952, 181075526129, 185611506877, 175094473270, 179088407891, 188247703607, 177513614019, 181738800261, 186487500707, 174629220957, 174023051713, 175227640245, 182904650348, 176780407855, 177900369831, 176648759555, 180833316450, 186134954327}
Returns: 188841434734
1000000000000
{315030231878, 612512823717, 775618766598, 365271677985, 606983419116, 308153460487, 277473479277, 720514168182, 329769475244, 209336128691, 328759328392, 821992711453, 321158996379, 487991311494, 475319239346, 422652768984, 445371309351, 537418125940, 643964257645, 323528417815, 218135458301, 584567627055, 520116869461, 314255087380, 521719983231, 328628342739, 595665438776, 400093191148, 411938458718, 755287146577, 759909914886, 818954253450, 663928451803, 371141224207, 691673668031, 768573401072, 273890117773, 709559255998, 465403289710, 380022438445, 510158359293, 727350365839, 521862133755, 740000535429, 649998313780, 850638141685, 800126789401, 242255737387, 412733650479, 782272268292}
Returns: 1800126789401
1000000000000
{677582017486, 715548388923, 744343998150, 675587689005, 749572150918, 668797088930, 750535380826, 751366237244, 773252411847, 715757398551, 773763776225, 693517258130, 766458888422, 753847476380, 758136580056, 692164525416, 771514414306, 728905301322, 708517817018, 768488226180, 713559861362, 741261569434, 670782919213, 683316042891, 694440521807, 758768549094, 685509714343, 728577634972, 701948332650, 723469160913, 704715764056, 674479641880, 728910449706, 709759258319, 689045143362, 681675497117, 675725557314, 712729719124, 750933421653, 665209984272, 659294575588, 706451522504, 718565435785, 762588396907, 752430973125, 736001723342, 716418075774, 690712503512, 679784868099, 716125344347}
Returns: 773763776225
1000000000000
{399695491732, 284600508474, 253175395577, 407230697321, 269291900162, 385157049132, 301802917656, 261347204586, 243927967198, 379849185923, 356026998794, 256676291186, 411248122979, 335574485521, 269073866357, 251795239221, 403566792495, 378126396697, 280602005424, 268314754035, 405975348765, 362310406837, 364082211706, 340891052229, 393878498729, 266246602389, 331463459823, 279313888269, 416088299488, 313346602177, 344653840843, 331431015392, 358663913790, 241892798450, 256516074942, 234379282498, 349280544108, 228140602229, 289522537324, 357784463138, 303542815588, 352341126028, 277599218106, 346684616528, 328438912276, 228832941974, 264240297742, 277511479737, 255082413045, 362522604343}
Returns: 416088299488
1000000000000
{557962915129, 550437344082, 475444364809, 232612485427, 570055453024, 93618130427, 222124411843, 44732403191, 141168039949, 122411660887, 578501939021, 178468975112, 519583045827, 202468453183, 443734715629, 466930910410, 70025669304, 405377762829, 203482965321, 435941967087, 187787069175, 300496111443, 290456503833, 283517635295, 202826190253, 297076835265, 425741822050, 387408526887, 389977769792, 387197056456, 368015665123, 380976896192, 570075982521, 275175818205, 546477563307, 167338549320, 426798978046, 313175127011, 436491101553, 42889679956, 292210883354, 367603045857, 567599322779, 262191741505, 340791353685, 482665139143, 437806831684, 153338630796, 151790087567, 144973420205}
Returns: 1550437344082
1000000000000
{333167947749, 347543414574, 372055080325, 452639261185, 345170819728, 299963370759, 273303668306, 410605105603, 388954993321, 329906038458, 358132413605, 370812999091, 356914442813, 255934632782, 390475120860, 386948915847, 431251765677, 234764961311, 412163746557, 446511285506, 448802494872, 450724053189, 379272042686, 279192301604, 299336014280, 374145474278, 453726902511, 289861626220, 324376394995, 409205590815, 350036888163, 330048710811, 304173179034, 323989842691, 380093214094, 340963770679, 339289313400, 346914041620, 266424871031, 455180597111, 372082452366, 400200394886, 286046560967, 341952912076, 315497778002, 234999473840, 249819688567, 297060276564, 350392663696, 430432590731}
Returns: 455180597111
1000000000000
{592157299801, 570807933241, 486853659369, 574789184361, 751713067368, 494026589427, 836679401020, 541528592008, 831262193203, 524854759368, 679300142478, 782433469900, 605208412100, 676544356229, 613822424035, 660847388498, 529229361532, 672412223502, 472368513147, 806999562902, 808733307181, 580036478361, 556041346140, 802602018896, 587683592931, 830651042736, 548239616708, 536345690739, 834529732051, 711288627722, 699233558126, 458133126440, 652339366363, 485792466569, 672432755423, 700443513948, 804125313608, 699111819355, 717988239342, 538008843395, 767859168616, 749146086140, 533782933385, 600436666165, 536173595282, 582761353294, 776895747144, 806239085575, 805444927602, 487875169201}
Returns: 836679401020
1000000000000
{856822577163}
Returns: 856822577163
4
{3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2}
Returns: 3
7
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}
Returns: 2
15
{9, 3, 5, 9, 7, 3, 8, 3, 2, 7, 6, 4, 5, 9, 9, 7, 2, 6}
Returns: 24
21
{12, 13, 14, 13, 14, 13, 13, 12, 12, 13, 14, 14, 12, 13, 12, 13, 12, 14, 13, 13, 14, 12, 13, 14}
Returns: 14
62
{53, 29, 37, 47, 52, 38, 36, 37, 43, 55, 52, 45, 40, 26, 43, 48, 50, 53, 55, 36, 50, 55, 25, 33, 49, 48, 46, 50, 53, 53, 27, 45, 54, 27, 46, 55, 38, 39, 54, 38, 25, 36, 43, 44, 47}
Returns: 55
65
{42, 47, 45, 50, 43, 42, 45, 48, 45, 42, 45, 42, 42, 44, 51, 42, 46, 40, 46, 41, 41, 40, 48, 50, 41, 50, 41, 51, 46, 43}
Returns: 51
139
{13, 17, 11, 10, 12, 16, 10, 16, 11, 12, 13, 19, 19, 17, 12}
Returns: 19
359
{1, 44, 23, 24, 22}
Returns: 44
625
{62, 31, 38, 217}
Returns: 663
1993
{1727, 1725, 1783, 1676, 1679, 1710, 1679, 1724, 1668, 1639, 1647, 1750, 1658, 1672, 1787, 1740, 1651, 1682, 1733, 1683, 1770, 1756, 1725, 1731, 1676, 1686, 1705, 1745, 1694, 1753, 1786, 1708, 1643, 1734, 1698, 1671, 1685, 1790, 1698, 1731, 1754, 1786, 1656, 1635, 1690, 1738, 1738, 1639, 1788}
Returns: 1790
3954
{1528, 817, 2576, 3030, 2380, 3199, 2820, 1209, 2186, 2758, 1780, 2676, 2589, 3142, 1845, 629, 1821, 805, 2694, 1642, 1462, 2612, 1584, 1339, 2905, 665, 2096, 3025, 1505, 3186, 1695, 2899, 2508, 2602, 1489, 1055, 937, 797}
Returns: 6774
5065
{2855, 2875, 2582, 2585}
Returns: 2875
8239
{3987, 4549, 3734, 4292, 4712, 4814, 3212, 3397, 4800, 3154, 3434, 3564, 3653, 3338, 3483, 3631, 4127, 3330, 3590, 3664, 4127, 4458, 4335, 4281, 3090, 4915, 5001, 4513, 3169, 4499, 3777, 4401, 4621}
Returns: 5001
16657
{1590, 1876, 3182, 3347, 1699, 3149, 2951, 3102, 1351, 766, 1240, 3571, 4150, 658, 504, 3023, 1491, 3924, 1288, 1391, 2244, 1755, 3524, 4146, 3117, 2194, 2808, 3794, 1776, 3031, 4006, 2365, 4110, 2754, 3584, 608}
Returns: 20228
39948
{30862, 29582, 30726, 28498, 31132, 31353, 28669, 31382, 29950, 31205, 29362, 29502, 29352, 31163, 31628, 30275, 29228, 28370, 29879, 29568, 29848, 30355, 28264, 30162, 30061, 29327, 30940, 30024, 28075, 30757, 31559, 28461, 30722, 30931, 28732, 31595, 29574, 30640, 28957, 31396, 28586, 29526, 30705}
Returns: 31628
86890
{30984, 46790, 40024, 52961, 31890, 29794, 30212}
Returns: 52961
147542
{66981, 60745, 51537, 36998, 41590, 37702, 48808, 74315, 54834}
Returns: 74315
504514
{209889, 216825, 202187, 202346, 214911, 211894, 215239, 217472, 202516, 215397, 215160, 216817, 209652, 217171, 208476, 207459, 214675, 201682, 214740}
Returns: 217472
1007896
{530160, 799939, 539718, 769673, 873836, 813029, 619043, 841977, 521683, 540462, 780426, 697015, 765219, 788060, 744491, 743652, 649389, 467511, 610338, 667474, 694911, 531793, 814991, 575478, 472807, 732035, 565110, 478824, 704905}
Returns: 873836
1109754
{82268}
Returns: 82268
3444575
{1420523, 1464802, 1595004, 1655049, 1398913}
Returns: 1655049
6479996
{2405424, 2755572, 2359272, 2064311, 2943793, 2817658, 2003843, 2999525, 2301489, 2649426, 2117956, 2236486, 2602931, 2666978, 2145589, 2321925, 2050276, 2793642, 3032481, 2000948, 2278340, 2894509, 2573735, 2133115, 2437621, 2746038, 2493530, 2265998, 2165752, 2060477, 3073068, 2579826, 1964163, 2831411, 1933041, 2066079, 2969775, 2953943, 3009488, 2883489, 2107676}
Returns: 3073068
9644491
{8063862, 8135826, 8009332, 7953165, 7978045}
Returns: 8135826
28038509
{21250190, 20855433, 21466109, 19714216, 19880764, 21686099, 18869300, 20936054, 21076458}
Returns: 21686099
56313410
{47253809, 44514981, 44187910, 49010777, 42145096, 44616748, 42838975, 42060612, 45008037, 41514712, 44566506, 42236225, 47617905, 42231436, 45339237, 46950733, 47472219, 47359306, 47248972, 48401328, 46973850, 48494501, 45829593, 44601969, 44684321, 41973408, 45181533, 46072397, 44381183, 47844399, 45381643, 41697008, 41402583, 44863354, 43127713, 47728137, 45616707, 45264066, 48329942, 42526013, 41718270, 43121616, 42780428, 43576541, 47713603, 45602873, 48686047, 42988812, 45386500, 46344169}
Returns: 49010777
88271627
{56348149, 53659740, 52008376, 37410374, 56506415, 51364333, 41968856, 47926872, 40396198, 52780571, 33456184, 28704889, 65794570, 32080492, 58650978, 23718037, 54143848, 68090126, 27390949, 60022533, 47267021, 60830844, 23661474, 29310358, 63171570, 50191473, 73324739, 56274360, 44275158}
Returns: 144545987
268017627
{147752969, 100463475, 97708396, 92654974, 96797847, 85902731, 110076714, 81329299, 93212298}
Returns: 147752969
405260933
{171625645, 121928573, 23157141, 167702625, 13140024, 112683290, 184762552, 151595453, 170336090, 81789521, 3616826, 108119167, 62595564, 84565418, 131628826, 105885930, 172890899, 163345870, 101695837, 155775892, 210057209, 143429004, 177518119, 30521160, 105143459, 127260788, 95505866, 118147144, 173039265, 92575773, 196763753, 35555078, 153955196}
Returns: 568606803
810536354
{513315268, 356158610, 330447614, 360324999, 473145745, 464903308, 258106418, 285916442, 157574623}
Returns: 1275439662
1082423052
{795069806, 717710883, 811262042, 666795188, 840252521, 682397323, 703139144, 825122688, 659654560, 776088874, 716371428, 771802323, 767166137, 713299678, 713665551, 763742011, 693434254, 715646712, 691015757, 684530740, 675890781, 816350572, 810344542, 810597329, 808826807, 701117721, 763189961, 794273814, 736343904, 794312244, 746147505, 668227107, 803036027, 767882957, 765731411, 790377149, 678332249}
Returns: 840252521
2876385977
{122241428, 390340867, 317312059, 501064370, 139721774, 508409061}
Returns: 508409061
7449812942
{4400540998, 4411304155, 3874314027, 4665357271, 4375565984, 3969384758, 4605479358, 3987949106, 4111711431, 4694523533, 4506032096, 4339529402, 3797771361, 4031695517, 4550305640, 3831421531, 4230959654, 4704686360, 4302386210, 3884466956, 3808729302, 4629429155, 4076223252, 4654454212, 4730106359, 3824710726, 3847495140}
Returns: 4730106359
10451438728
{8907660555, 4213877013, 887203615, 1733671228, 9126874810, 7266652691, 6426259797, 4400509345, 132147361, 2951223791, 5842809826, 3776035893, 2971909181, 9131736370, 1155228065, 7372327130, 7897999534, 4738765249, 3548611760, 6275164303, 4932999532, 1628077764, 5968818653, 9179036848, 449414124, 7240364098, 7921895970, 7545840036, 7392043031, 1731027983, 192017231, 6110795259, 1222676846, 8978497338, 8148939199, 155855591, 6864632333, 2509933407, 9029047218, 7333871113}
Returns: 18600377927
32995166501
{11263048272, 12691129509, 13645840039, 14205283116, 8253078911, 13406303323, 7362150907, 9236577928, 13679633535, 13029306944, 7209136577, 17332326233, 17896099349}
Returns: 50327492734
60980797267
{30948458335, 29611804069, 33066106187, 29001742186, 32293327550, 29959470178, 33336899989, 29557984034, 37053373804, 34352193889, 30799506203, 32043275376, 30181625249, 31211168932, 31952469427, 37625579239, 28553887420, 36957745417, 31587727464, 30216081779, 31432745478, 33943794398, 29182847732, 30448878065}
Returns: 37625579239
74750520628
{11456910442, 57836773791, 33991271817, 3510772593, 31895609715, 41029070095, 26375329269, 12311054869, 25671255183, 13618916058, 40040165492, 47134909810, 32529614955, 27110858611, 18076982940, 2082250048, 6887261744, 64340799518, 32119617541, 17638010050, 32940264373, 28844962770, 46848220054, 42383469583, 39919767886, 26815519246, 40374514221, 57230207562, 61911977981, 40511863075, 61773213139, 51293881533, 63467548580, 25448090021, 35816702139, 25540993536, 32144982163, 13056397181, 15460073833, 61655916542, 15658810573, 29984703928, 14174322323, 14442799017, 1325907765, 13568358040, 43317328354, 51753434131, 60818084773, 21532146403}
Returns: 131980728190
245678412343
{144924311004, 164816195854, 148084939733, 147709323696, 190936009573, 154002108126, 135473452194, 165111590192, 111344883149, 115763459075, 185713065607, 138057299292, 171355308151, 139738098728, 137958560038, 118624638095, 177205934754, 161393464273, 141427726249, 163534127743, 178469661504, 120713323608, 158112093074, 157504999880, 191887817705, 193186720042, 101628335453, 132618651904, 150784319632, 106182018877, 188208795492, 193556194452, 153266239400, 100365820440, 123776125124, 172486868227, 159584541813, 96683099591, 150201873576, 178897588290, 177729463966, 182203395466, 105464121247, 188614753478, 152504340645, 122257026152, 125749324881}
Returns: 193556194452
385008263579
{324437311942, 314043263556, 326125469753, 315422763785}
Returns: 326125469753
877941251613
{228688062841, 114341950808, 272130107665, 190519452145, 240692314792, 193168928114, 385988703236, 448148516309, 307339811047, 195824949718, 196694211409, 194182340924, 381457732364, 113095387700, 428840470389, 315837997357, 137771593307, 256966066471, 132370830510, 196009407878, 284426024301, 261024109488, 236461828839, 74202611615, 433537623705, 207888642648, 443554954783, 181760287366, 120417687371, 274909326851}
Returns: 1263929954849
1000000000000
{2013, 2013, 2013, 2013, 2013}
Returns: 2013
There could have been 2013 foxes. All foxes stepped at all positions.
10
{0, 0, 0}
Returns: 0
There can be no foxes.
4
{2, 0, 1, 3}
Returns: 4
1000000000000
{999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 999999999999, 969999999999, 959999999999, 999999999999, 999999999999, 979999999999, 979999999999, 999999999999, 999999999999, 989999999999, 989999999990, 999999999999, 929999999999, 929999999999, 999999999999, 999999999999, 869999999999, 869999999999, 999999999999, 999999999999, 499999999999, 499999999999, 999999999999, 999999999999, 999999999999, 749999999999, 749999999999, 999999999999, 999999999999, 999999999999}
Returns: 1989999999990
1000
{10, 13, 17, 22, 25, 28 }
Returns: 1025