Considere um pedaço de corda (como em "corda", não como em "um monte de caracteres"), que é dobrado para frente e para trás na linha real. Podemos descrever o formato da string com uma lista de pontos pelos quais ela passa (em ordem). Para simplificar, assumiremos que todos esses pontos são inteiros.
Tome como exemplo [-1, 3, 1, -2, 5, 2, 3, 4]
(observe que nem cada entrada implica em uma dobra):
A corda que se estende ao longo da direção vertical é apenas para fins de visualização. Imagine a corda toda achatada na linha real.
Agora, aqui está a pergunta: qual é o maior número de peças em que essa corda pode ser cortada com um único corte (que teria que ser vertical na figura acima). Nesse caso, a resposta é 6 com um corte em qualquer lugar entre 2
e 3
:
Para evitar ambiguidades, o corte deve ser realizado em uma posição não inteira.
O desafio
Dada uma lista de posições inteiras pelas quais uma string é dobrada, você deve determinar o maior número de partes em que a string pode ser cortada com um único corte em uma posição não inteira.
Você pode escrever um programa completo ou uma função. Você pode receber entradas via STDIN, argumento de linha de comando, prompt ou parâmetro de função. Você pode gravar a saída em STDOUT, exibi-la em uma caixa de diálogo ou retorná-la da função.
Você pode supor que a lista esteja em qualquer formato conveniente de lista ou string.
A lista conterá pelo menos 2 e não mais de 100 entradas. As entradas serão inteiras, cada uma no intervalo -2 31 ≤ p i <2 31 . Você pode assumir que não há duas entradas consecutivas iguais.
Seu código deve processar qualquer entrada (incluindo os casos de teste abaixo) em menos de 10 segundos em um PC de mesa razoável.
Casos de teste
Todos os casos de teste são simplesmente de entrada, seguidos de saída.
[0, 1]
2
[2147483647, -2147483648]
2
[0, 1, -1]
3
[1, 0, -1]
2
[-1, 3, 1, -2, 5, 2, 3, 4]
6
[-1122432493, -1297520062, 1893305528, 1165360246, -1888929223, 385040723, -80352673, 1372936505, 2115121074, -1856246962, 1501350808, -183583125, 2134014610, 720827868, -1915801069, -829434432, 444418495, -207928085, -764106377, -180766255, 429579526, -1887092002, -1139248992, -1967220622, -541417291, -1617463896, 517511661, -1781260846, -804604982, 834431625, 1800360467, 603678316, 557395424, -763031007, -1336769888, -1871888929, 1594598244, 1789292665, 962604079, -1185224024, 199953143, -1078097556, 1286821852, -1441858782, -1050367058, 956106641, -1792710927, -417329507, 1298074488, -2081642949, -1142130252, 2069006433, -889029611, 2083629927, 1621142867, -1340561463, 676558478, 78265900, -1317128172, 1763225513, 1783160195, 483383997, -1548533202, 2122113423, -1197641704, 319428736, -116274800, -888049925, -798148170, 1768740405, 473572890, -1931167061, -298056529, 1602950715, -412370479, -2044658831, -1165885212, -865307089, -969908936, 203868919, 278855174, -729662598, -1950547957, 679003141, 1423171080, 1870799802, 1978532600, 107162612, -1482878754, -1512232885, 1595639326, 1848766908, -321446009, -1491438272, 1619109855, 351277170, 1034981600, 421097157, 1072577364, -538901064]
53
[-2142140080, -2066313811, -2015945568, -2013211927, -1988504811, -1884073403, -1860777718, -1852780618, -1829202121, -1754543670, -1589422902, -1557970039, -1507704627, -1410033893, -1313864752, -1191655050, -1183729403, -1155076106, -1150685547, -1148162179, -1143013543, -1012615847, -914543424, -898063429, -831941836, -808337369, -807593292, -775755312, -682786953, -679343381, -657346098, -616936747, -545017823, -522339238, -501194053, -473081322, -376141541, -350526016, -344380659, -341195356, -303406389, -285611307, -282860017, -156809093, -127312384, -24161190, -420036, 50190256, 74000721, 84358785, 102958758, 124538981, 131053395, 280688418, 281444103, 303002802, 309255004, 360083648, 400920491, 429956579, 478710051, 500159683, 518335017, 559645553, 560041153, 638459051, 640161676, 643850364, 671996492, 733068514, 743285502, 1027514169, 1142193844, 1145750868, 1187862077, 1219366484, 1347996225, 1357239296, 1384342636, 1387532909, 1408330157, 1490584236, 1496234950, 1515355210, 1567464831, 1790076258, 1829519996, 1889752281, 1903484827, 1904323014, 1912488777, 1939200260, 2061174784, 2074677533, 2080731335, 2111876929, 2115658011, 2118089950, 2127342676, 2145430585]
2
a reasonable desktop PC
ambíguo?