Problem Statement
A rectangular polygon is a polygon whose edges are all parallel to the coordinate axes. The polygon must have a single, non-intersecting boundary.
You are given several horizontal line segments. You may remove some of the given segments and add any number of vertical segments to construct a rectangular polygon. Your goal is to maximize the number of edges in the final polygon.
You will be given
Definition
- Class:
- RestoringPolygon
- Method:
- restore
- Parameters:
- int[], int[], int[]
- Returns:
- int
- Method signature:
- int restore(int[] x1, int[] x2, int[] y)
- (be sure your method is public)
Constraints
- x1, x2 and y will all contain the same number of elements.
- x1, x2 and y will each contain between 1 and 16 elements, inclusive.
- Each element of x1, x2 and y will be between -1000 and 1000, inclusive.
- Corresponding elements of x1 and x2[i] will not be equal.
- The line segments described by x1, x2 and y will not have common points.
Examples
{1,2,3,1}
{2,3,5,5}
{1,4,2,0}
Returns: 8
In this case all segments can be the edges of the polygon. The resulting polygon has 4 horizontal and 4 vertical edges for a total of 8.
{1,1,2,2}
{3,3,4,4}
{0,2,1,3}
Returns: 4
In this case either the first two segments or the last two segments can be used to construct a square.
{1}
{2}
{1}
Returns: 0
One segment is not enough.
{0,0,0}
{1000,1000,1000}
{0,1,2}
Returns: 4
{0,0,3,3}
{1,1,4,4}
{0,1,2,3}
Returns: 4
{0,0}
{1,1}
{0,1}
Returns: 4
{0,0}
{1,2}
{0,1}
Returns: 0
{0,1}
{1,2}
{0,1}
Returns: 0
{0,1}
{3,2}
{0,1}
Returns: 0
{0,2}
{1,3}
{0,0}
Returns: 0
{0,2}
{1,3}
{0,1}
Returns: 0
{0,1,1,0}
{3,2,2,3}
{0,1,2,3}
Returns: 4
{0,1}
{1,0}
{0,1}
Returns: 4
{0,1,1,2}
{1,0,2,1}
{0,4,2,3}
Returns: 8
{0,0,0,0}
{1,1,1,1}
{0,1,2,3}
Returns: 4
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0}
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15}
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
Returns: 32
{0, 0, 0, 0}
{1, 3, 2, 1}
{0, 1, 2, 3}
Returns: 4
{0, 0, 0, 0}
{2, 1, 1, 3}
{0, 1, 2, 3}
Returns: 4
{1, 3, 2, 1}
{4, 4, 4, 4}
{0, 1, 2, 3}
Returns: 4
{2, 1, 1, 3}
{4, 4, 4, 4}
{0, 1, 2, 3}
Returns: 4
{722}
{-938}
{-454}
Returns: 0
{-836}
{-149}
{-859}
Returns: 0
{-264}
{550}
{396}
Returns: 0
{-549, -549}
{-968, -968}
{-976, -154}
Returns: 4
{-847, -795}
{-795, -847}
{480, -719}
Returns: 4
{-193, 323}
{323, -193}
{595, -519}
Returns: 4
{-180, -180, -726}
{-423, -726, -423}
{360, 810, 585}
Returns: 6
{-399, -399, -399}
{-90, -90, 432}
{-531, 167, -321}
Returns: 4
{-885, -224, -224}
{-627, 366, 366}
{17, -136, 17}
Returns: 4
{-807, -814, -814, -807}
{-814, -807, -807, -814}
{-438, -624, -988, -892}
Returns: 4
{696, -193, -193, 367}
{367, -276, -276, 696}
{-14, 168, -14, 168}
Returns: 4
{-856, 682, -856, -254}
{872, -107, 682, -856}
{-899, 721, 173, 783}
Returns: 0
{-463, -463, 95, 606, 447}
{606, 29, 29, 447, 606}
{734, 884, -563, -563, 884}
Returns: 4
{-70, 666, -70, 693, -583}
{666, 693, -677, -70, -70}
{637, -587, -859, 476, -587}
Returns: 0
{-171, -155, -584, -405, -926}
{-155, -171, -155, -926, -405}
{-147, 316, -658, -147, 316}
Returns: 4
{312, -891, -588, 721, -647, 569}
{-588, -588, -891, 569, -891, 655}
{192, -539, 62, 192, -197, -197}
Returns: 4
{164, 949, 472, 949, 663, -735}
{472, 472, -735, 663, 720, 210}
{423, 992, 544, 423, 544, 992}
Returns: 0
{133, -407, 434, 564, 564, -407}
{434, 319, -82, 695, 695, -82}
{-283, 317, 571, 317, 571, -283}
Returns: 4
{-939, -939, -939, 701, 564, 564, 452}
{-598, -598, 452, -175, 701, 701, -175}
{136, -467, -848, 313, -699, -467, -699}
Returns: 4
{668, 690, 668, 26, 690, -415, 26}
{-415, 576, -415, 668, 668, 576, 423}
{722, 176, 767, 683, -539, -539, 176}
Returns: 4
{-814, 587, 727, 587, 726, 969, 587}
{587, -778, -778, 969, 727, 727, 727}
{-838, -253, -242, -593, -838, -253, -511}
Returns: 8
{-186, -825, -825, -186, -186, -825, -825, -825}
{-825, -186, -186, -825, -825, -186, -186, -186}
{225, -251, -612, 826, 221, -47, -945, 354}
Returns: 4
{478, 478, 478, -478, -473, -478, -473, 336}
{-478, -473, -473, 939, 336, -473, -447, 939}
{912, 119, -635, 933, 456, -177, -800, -177}
Returns: 8
{-511, 304, 688, -384, -401, 624, -401, -511}
{624, 688, -384, 304, -436, 688, -511, -401}
{-236, -583, 58, -920, 58, -920, -583, -920}
Returns: 6
{91, -654, -396, -654, -354, 451, -711, 451, -638}
{338, -354, 451, 91, -638, -638, -654, 91, -396}
{-768, -613, -981, 160, 525, -249, 567, 567, -768}
Returns: 6
{247, -34, 462, 247, -158, -34, 302, -720, 247}
{-549, -720, 302, 462, 462, 753, 462, -549, 436}
{-104, 301, 301, 939, 671, 624, -104, -591, -591}
Returns: 4
{710, -626, 710, -808, 336, 336, 336, -808, 336}
{-587, -587, -808, -164, -164, -587, -808, -626, -587}
{752, -162, 171, 797, 648, -29, -166, 760, 760}
Returns: 10
{739, -286, 821, 219, -286, 219, 821, -286, -632, 821}
{-383, -632, -383, -286, -632, 739, 739, -632, -286, 739}
{205, 789, -966, -137, 304, 272, 303, 998, 272, -285}
Returns: 6
{987, 794, 797, -374, -681, -346, -715, -612, -831, -779}
{-346, -715, 501, -779, -346, -612, -831, 501, 797, 501}
{-757, 415, 30, -345, 30, -829, 613, 656, 518, -192}
Returns: 0
{-181, 275, 275, 326, -297, -297, -297, 275, -181, -386}
{326, -386, -386, -297, 326, 275, 326, 84, -297, -297}
{-139, 665, 845, -943, -389, 757, 920, -543, -543, -139}
Returns: 12
{285, 475, 475, 285, -130, 475, 285, 475, 714, 714, 714}
{714, 848, -130, -130, 848, 285, -130, 285, 848, 848, 848}
{-731, 610, -192, 610, 369, -355, 353, -666, -666, -192, 353}
Returns: 16
{-261, -60, -60, 108, -856, -674, 949, -856, -528, -261, 949}
{618, -480, 108, 207, 618, -60, 170, 108, -856, -60, -480}
{-825, -664, 997, 29, 459, 29, 722, -174, 7, 722, 7}
Returns: 0
{-867, -416, 615, 540, 540, -416, 615, -416, -867, -867, 946}
{540, 946, 946, 615, 615, -867, 946, -867, -416, 540, 615}
{-175, 310, 782, 121, -39, -760, -760, -39, 121, 782, -175}
Returns: 16
{-670, -670, 540, -477, 518, 306, 306, -670, -930, 518, -670, -855}
{306, 306, -930, 795, 795, -571, -670, 795, -855, 795, -855, -930}
{-406, -523, -694, -143, -507, -507, 997, -58, -143, 997, -507, 997}
Returns: 4
{260, 215, 959, 954, -156, 954, -543, -979, -985, -134, -985, -543}
{-543, 959, -99, -99, 543, -156, -985, -543, -979, -99, -844, -156}
{-976, 39, 359, -324, -948, -377, 39, 359, -948, 39, -324, -324}
Returns: 0
{786, -475, -475, -407, -124, 365, -124, -207, 418, 786, 887, 365}
{365, 365, 786, -207, -407, 418, 365, -124, 786, -573, -207, 418}
{-134, 127, 176, -134, 994, 816, 2, 816, 127, 978, -932, 994}
Returns: 6
{-717, 481, -518, -717, -717, -518, 821, 481, 346, 358, 260, 821, -518}
{-518, 346, 260, -518, 358, 616, 481, 218, 616, 481, 346, 481, 218}
{111, -808, 345, -758, 580, 914, 345, 452, -458, 111, 111, 580, -808}
Returns: 12
{455, -18, 296, -680, 296, 133, 133, -467, -467, 201, -44, -306, 296}
{-467, -44, -776, 201, -467, -776, 142, -149, -149, 142, 201, -18, -149}
{130, -503, 421, -230, 290, -598, -882, -427, -882, -427, -565, -68, 996}
Returns: 4
{-394, -473, -195, -290, 871, 751, -283, -426, -394, 871, -394, -290, -726}
{869, -726, 869, -726, -290, 58, 871, -195, 58, -585, 871, -473, -426}
{-206, -147, -629, -629, -147, -196, 314, -196, 570, 113, 885, 314, 570}
Returns: 6
{78, 78, -234, -172, -234, 984, -234, -807, -736, -336, -372, -807, -62, 993}
{993, -234, 984, -818, 984, 370, -807, 370, 984, 370, -640, -818, -172, 370}
{-946, -369, -739, -946, -70, -212, -951, 141, 53, 656, -70, 53, -951, -951}
Returns: 8
{350, 937, -495, 826, 350, -495, 937, -815, -125, 350, 350, 844, 844, -125}
{844, 534, -125, -282, -815, -282, -495, 844, -815, 107, 826, 534, 937, 107}
{169, 547, 169, -230, -651, -217, 601, -61, 547, 547, -217, -651, -217, -217}
Returns: 12
{-444, -847, 618, -487, -582, -808, 1, 838, -808, -582, 838, -582, 838, -847}
{-779, 504, -808, -65, 838, -487, -582, -444, -847, 349, 227, -779, 618, -779}
{-875, 582, 729, 77, 723, 548, 718, 548, -127, -127, 77, 77, 582, 718}
Returns: 8
{19, -397, 30, 150, -966, -397, 332, 332, 589, 332, -61, -61, -292, -397, 589}
{-966, -292, -61, -966, 332, -42, 30, 589, 100, -966, 100, 19, -966, -966, 19}
{-942, 814, -826, -487, -110, 289, 814, 192, -646, 754, 716, -646, -646, -537, 289}
Returns: 12
{-239, -675, -471, 630, -239, 630, 630, -239, 630, -693, 630, -760, 343, -675, 97}
{-693, 97, 630, -471, -256, 97, -693, -693, 97, 343, 343, -693, -693, -760, 630}
{491, 497, 559, 721, 527, 512, 335, 853, 527, 570, 491, 721, 953, 512, 853}
Returns: 10
{361, -563, 791, -138, 361, 168, 791, -563, -266, -563, 657, -138, 506, 927, 927}
{-266, -617, -266, -266, -617, -266, 927, 168, 927, -138, -563, 927, -617, 506, 693}
{-896, -284, -284, 268, 649, -374, 649, -802, 203, 122, -659, -754, -124, -896, -802}
Returns: 0
{-711, -369, -369, -226, -226, -226, -226, -975, 295, 927, -975, -183, -711, -711, 927, -711}
{295, 927, 927, -648, 927, 927, -369, -183, -369, -70, -711, 161, -648, -975, 409, -648}
{-280, -932, 316, 446, -42, 749, 40, 509, -289, 446, 446, 40, -42, -289, 509, 316}
Returns: 22
{908, 670, -190, 570, 908, 251, -271, 908, 70, 570, 920, -190, -190, 905, -555, -713}
{-271, 570, 905, -713, -190, 956, -713, -950, -713, 908, 908, -271, -950, 670, -271, -555}
{972, 941, -270, 818, 683, 125, -705, -736, 176, 176, -418, -949, 125, -949, -270, 683}
Returns: 12
{-400, 450, -661, 209, 938, 450, 209, 547, 547, 938, 938, -661, -400, -400, -661, 547}
{-661, -661, -927, -400, -661, -400, 199, 450, 450, -400, 547, 450, 209, -510, -510, -510}
{747, -567, -117, -936, 386, -477, 747, -117, 747, -133, -936, 633, -204, -117, -133, -331}
Returns: 12
{-18, 611, -236, 102, 90, 90, 611, 611, 976, 670, -236, 611, 611, -18, 670, 611}
{-236, 670, 102, 90, 976, -18, 976, 612, -236, -18, 102, 976, 976, -236, 611, 612}
{-196, -549, 519, 409, 91, -929, 409, 887, -655, -119, -549, -93, 519, 409, -929, -196}
Returns: 12
{922, -830, 267, -733, 244, -733, -831, 752, 706, -800, -800, -991, -831, 276, 922, 922}
{-800, 276, -991, 649, 207, -991, -733, 267, -831, 244, 267, -830, 922, -830, -800, 706}
{348, 859, -987, 930, 540, -256, 540, 540, 424, -67, 53, 930, 904, -654, 191, -59}
Returns: 6
{138, -221, 120, -754, -878, -754, -401, -754, 120, -878, -221, -138, -138, -567, -878, -138}
{-221, 138, -412, -265, 138, -878, -754, -878, 138, -265, -138, 120, -401, -221, -401, -221}
{212, 346, 796, -583, -758, 896, 34, 754, 56, 346, 34, -392, 56, 754, -392, -583}
Returns: 16
{477, 822, 477, -771, 609, 609, 477, 822, 99, 99, -139, -771, 822, -139, -139, 822}
{609, 609, 803, 99, 477, 99, 609, 803, 477, 822, -771, -139, 803, 99, -771, 609}
{514, -104, 384, 384, -31, -829, 86, -31, 728, -427, -427, -829, 514, -104, 86, 728}
Returns: 22
{-237, -78, 375, 602, 370, -954, -242, 375, 370, -101, 375, -510, -954, 370, -237, 740}
{-101, -242, -242, -587, -242, -242, 370, 602, 602, 740, 740, -78, -242, 602, -587, 375}
{268, 553, 663, 819, -773, 777, 304, 553, -31, 303, -721, -721, 268, 268, -31, -773}
Returns: 12
{891, 66, 92, -597, 893, 92, 893, -755, 92, 528, 160, -755, -149, -597, 92, -355}
{528, -149, 926, 66, 926, -757, 528, -757, -757, 893, 891, 891, 528, 66, 837, -597}
{665, 993, 843, 843, -440, 665, -765, 41, 781, 90, 781, -440, 41, -765, 993, 993}
Returns: 4
{-630, 36, -479, 414, 180, 819, -712, 621, 36, 819, -712, 36, -1, -832, -479, -518}
{-832, -779, 621, 180, -779, -888, 621, 414, -1, -570, 36, 621, 36, 621, -832, -832}
{-425, 908, 682, 150, 472, -767, -384, -580, -113, -423, -648, -425, -133, 378, 150, -403}
Returns: 6
{319, 373, 211, 319, 373, -338, -338, 373, -232, -338, 373, 373, -338, 373, 319, 211}
{211, -338, -338, 373, -102, 373, -102, -102, 373, 211, -338, -232, -232, 319, 211, 319}
{438, -428, -693, -326, 829, -963, -866, 8, -906, -326, 73, -111, 812, 196, -248, 812}
Returns: 14
{-1, -1, -939, 581, -837, 142, 581, -837, -939, -496, -1, 581, -496, -496, -496, -869}
{-614, -837, 581, -869, -826, 581, -869, -614, -614, -837, -826, -826, -1, -134, -1, -826}
{-391, -267, -532, -329, 203, -853, -53, 183, 860, -853, 97, 841, 786, 183, 860, 445}
Returns: 12
{-944, -224, -373, -944, -224, -4, 510, 164, -373, -224, 510, -373, -924, -4, -463, -4}
{164, -53, -53, -62, -4, -924, -944, 510, -924, -463, -463, -463, -944, -944, -224, -62}
{-824, -128, 160, -825, -847, -409, 354, -825, -128, 214, 275, -841, -280, -966, 518, 518}
Returns: 14
{252, 379, -274, 656, 619, -65, 379, 379, -929, 252, -929, 379, -274, -337, -337, 656}
{369, 811, 677, 677, 677, 369, -929, -274, -65, 677, -274, 656, 369, -929, -929, 619}
{-40, 7, 8, -75, 297, -75, 297, 101, -40, -701, -701, -40, 7, 8, 7, 101}
Returns: 20
{98, 870, -757, -652, -903, 870, 98, -426, 287, 287, -903, -903, -652, 287, 968, -652}
{-652, 287, 968, -903, -642, 188, 188, -903, -642, 968, -642, 287, 98, 188, -757, -903}
{828, -602, -544, -602, -668, 828, -668, -253, -53, -668, 248, 383, 84, -253, 648, -53}
Returns: 10
{262, -787, -787, 844, -259, 848, 262, 383, -595, -680, 262, 251, -259, 262, 262, 383}
{-201, -207, -942, 777, 58, 844, 777, 348, 383, -259, 251, 383, -201, -259, 348, 777}
{433, -875, -326, 433, -515, 615, 821, 615, -326, 821, -875, 326, 326, 615, -515, -875}
Returns: 14
{833, 434, -593, -582, -582, -582, -1000, -582, -593, 434, -593, 640, 640, -1000, 833, 833}
{-593, -582, 640, -703, -703, 434, -703, -538, -703, -593, -703, 434, 833, -703, 434, 434}
{-719, 283, -587, -98, 92, -786, -586, -364, -786, -586, -364, -98, 283, -587, 92, -364}
Returns: 18
{444, 444, -25, 379, 444, 444, 379, 444, -25, 444, -25, 126, 444, 379, -25, 444}
{-25, 126, 126, 444, 126, 379, 126, 379, 126, -25, 126, -25, 126, 444, 126, 379}
{364, -606, 902, 717, -123, -255, -597, 902, 468, -404, 446, 937, -759, 924, 924, -987}
Returns: 6
{0, 0, 0, 0, 0}
{3, 4, 3, 3, 4}
{1, 2, 3, 4, 5}
Returns: 8
{0, 1, 2}
{1, 2, 0}
{2, 0, 1}
Returns: 0
{0, 1 }
{1, 0 }
{0, 1 }
Returns: 4
{0, 0, 0, 0, 2, 2, 0, 0 }
{4, 2, 2, 4, 10, 10, 1, 1 }
{0, 1, 4, 10, 2, 3, 6, 7 }
Returns: 12
{0, 0, 0, 0 }
{1, 1, 1, 1 }
{3, 2, 1, 0 }
Returns: 4
{0, 1, 2, 0 }
{1, 2, 3, 3 }
{0, 2, 3, 1 }
Returns: 0
{0, 0, 0, 0 }
{3, 2, 2, 3 }
{0, 1, 2, 3 }
Returns: 8
{0, 100, 0, 100 }
{10, 110, 10, 110 }
{0, 0, 10, 10 }
Returns: 4
{0, 0, 100, 100, 150, 150, 30, 30, 130, 130, 170, 180, 160, 160, 210, 210 }
{200, 200, 150, 150, 200, 200, 230, 230, 180, 180, 230, 230, 210, 210, 260, 260 }
{0, 200, 50, 250, 25, 225, 30, 230, 180, 280, 55, 255, 110, 310, 85, 285 }
Returns: 8
{0, 0, 0, 0 }
{100, 50, 50, 100 }
{1, 2, 3, 4 }
Returns: 8
{0, 0, 0, 0 }
{2, 1, 1, 2 }
{0, 1, 2, 3 }
Returns: 8
{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }
{1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 }
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }
Returns: 24
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
Returns: 4
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
Returns: 4
{0, 0 }
{1, 2 }
{0, 1 }
Returns: 0
{-1, 0, 1, 1, 1, 2, 3, 3, 10, 20, 10, 20, 10, 20, 10, 20 }
{4, 3, 3, 2, 2, 3, 4, 4, 2, 3, 2, 3, 2, 3, 2, 3 }
{4, 2, 1, 3, 5, 6, 0, 7, 100, 101, 102, 103, 104, 105, 106, 107 }
Returns: 10
{1, 1, 1, 2 }
{2, 2, 2, 1 }
{1, 2, 3, 4 }
Returns: 4
{-3, 2, 2, 1, 2, -3, 2, -3, 3, 4, 4, 2, 1, 1, -3, -3 }
{1, 1, 4, -3, 4, 1, 3, 1, 4, 5, 5, 4, 2, -3, 1, 4 }
{4, 5, 4, 2, 2, 1, 0, -1, -1, -2, -3, -4, -5, -4, -2, -8 }
Returns: 30
{0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0 }
{3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3 }
{0, 1, 2, 3, 5, 6, 7, 8, 7, 6, 5, 3, 2, 1, 4 }
Returns: 28
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }
Returns: 4
{0, 0, 0, 0 }
{1, 1, 1, 1 }
{0, 1, 2, 3 }
Returns: 4
{1, 2 }
{3, 1 }
{2, 3 }
Returns: 0
{144, 250, 110, 0, -11, -64, 250, 0, 576, -11, 110, 110, 0, 76, 66 }
{-11, 567, 0, 114, 0, 250, 110, 114, 250, 114, -64, -11, 114, 5, 576 }
{-6, 1, -987, 4, -114, 11, -114, 1, 0, 8, -2, 0, 88, -8, 6 }
Returns: 6
{1, 0, 1, 2, 0 }
{4, 2, 3, 3, 4 }
{0, 1, 2, 3, 4 }
Returns: 0
{1, 0, 0 }
{2, 2, 1 }
{0, 1, 2 }
Returns: 0
{0, 0, 2 }
{2, 4, 4 }
{0, 2, 4 }
Returns: 0
{1, 2, 3 }
{2, 3, 1 }
{1, 3, 2 }
Returns: 0
{1, 2, 2, 1 }
{3, 3, 3, 3 }
{1, 2, 3, 4 }
Returns: 8
{1, 1, 2 }
{2, 3, 3 }
{1, 2, 3 }
Returns: 0
{0, 0, 1, 1, 1, 1 }
{1, 1, 2, 2, 2, 2 }
{2, 3, 0, 1, 4, 5 }
Returns: 8