Về mặt khái niệm, thử thách này thực sự đơn giản. Bạn được cung cấp một danh sách các số nguyên không âm . Nếu có thể, hãy tìm một số nguyên không âm , sao cho danh sách bao gồm được sắp xếp. Nếu không có như vậy , đầu ra sẽ là bất cứ thứ gì không thể nhầm với giá trị , ví dụ số âm, không có gì cả, lỗi, v.v.ai
N
bi = ai XOR N
N
N
Đây là một ví dụ:
[4, 7, 6, 1, 0, 3]
Nếu chúng tôi lấy mọi yếu tố trong danh sách này XOR 5
, chúng tôi sẽ nhận được
[1, 2, 3, 4, 5, 6]
được sắp xếp. (Lưu ý rằng danh sách kết quả không có các phần tử duy nhất và không có khoảng trống. Nếu kết quả của thao tác [0, 1, 1, 3]
đó vẫn không hợp lệ.) Mặt khác cho danh sách
[4, 7, 1, 6, 0, 3]
không N
tồn tại
Bạn có thể viết chương trình hoặc hàm, lấy đầu vào qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm và xuất kết quả qua tham số STDOUT (hoặc thay thế gần nhất), tham số trả về hàm hoặc tham số hàm (out).
Đầu vào có thể ở bất kỳ danh sách thuận tiện hoặc định dạng chuỗi. Bạn có thể giả sử rằng ít hơn mỗi và danh sách chứa ít nhất một phần tử.ai
231
Mã của bạn phải xử lý bất kỳ trường hợp thử nghiệm nào (đặc biệt là bốn trường hợp lớn) trong vài giây.
Mã tiêu chuẩnLuật áp dụng.
Các trường hợp thử nghiệm
Đối với mọi trường hợp kiểm tra không trả về, -1
có vô số câu trả lời đúng. Cái được liệt kê ở đây là cái nhỏ nhất. Các giải pháp bổ sung tồn tại bằng cách bổ sung các bit giống nhau trên tất cả các số nguyên trong đầu vào (đáng chú ý là các bit lớn hơn bit có ý nghĩa nhất trong số lượng lớn nhất của danh sách).
[4 7 6 1 0 3] => 5
[4 7 1 6 0 3] => -1
[0 1 3 4 6 7] => 0
[4 2 3 1] => 6
[2 3 0 0 7 7 4 5 11 11] => 2
[2 3 0 0 7 7 5 4 11 11] => -1
[1086101479 748947367 1767817317 656404978 1818793883 1143500039] => -1
[180522983 1885393660 751646477 367706848 331742205 724919510 850844696 2121330641 869882699 1831158987 542636180 1117249765 823387844 731663826 1762069894 240170102 1020696223 1212052937 2041219958 712044033 195249879 1871889904 1787674355 1849980586 1308879787 1743053674 1496763661 607071669 1987302942 178202560 1666170841 1035995406 75303032 1755269469 200581873 500680130 561748675 1749521426 1828237297 835004548 934883150 38711700 1978960635 209243689 1355970350 546308601 590319412 959613996 1956169400 140411967 112601925 88760619 1977727497 672943813 909069787 318174568 385280382 370710480 809689639 557034312 865578556 217468424 346250334 388513751 717158057 941441272 437016122 196344643 379529969 821549457 97008503 872313181 2105942402 603939495 143590999 1580192283 177939344 853074291 1288703007 1605552664 162070930 1325694479 850975127 681702163 1432762307 1994488829 780869518 4379756 602743458 1963508385 2115219284 1219523498 559301490 4191682 1918142271 169309431 346461371 1619467789 1521741606 1881525154] => -1
[37580156 64423492 87193676 91914964 93632157 96332899 154427982 176139560 184435039 228963836 230164674 279802291 301492375 309127664 345705721 370150824 380319820 403997410 410504675 416543032 418193132 424733526 428149607 435596038 477224208 515649925 519407995 525469350 614538124 624884850 642649261 653488151 679260270 685637235 690613185 739141066 825795124 832026691 832633584 833213619 852655299 913744258 917674993 921902522 925691996 931307936 954676047 972992595 997654606 1020009811 1027484648 1052748108 1071580605 1108881241 1113730139 1122392118 1154042251 1170901568 1180031842 1180186856 1206428383 1214066097 1242934611 1243983997 1244736049 1262979035 1312007069 1312030297 1356274316 1368442960 1377432523 1415342434 1471294243 1529353536 1537868913 1566069818 1610578189 1612277199 1613646498 1639183592 1668015280 1764022840 1784234921 1786654280 1835593744 1849372222 1875931624 1877593764 1899940939 2007896363 2023046907 2030492562 2032619034 2085680072 2085750388 2110824853 2123924948 2131327206 2134927760 2136423634] => 0
[1922985547 1934203179 1883318806 1910889055 1983590560 1965316186 2059139291 2075108931 2067514794 2117429526 2140519185 1659645051 1676816799 1611982084 1736461223 1810643297 1753583499 1767991311 1819386745 1355466982 1349603237 1360540003 1453750157 1461849199 1439893078 1432297529 1431882086 1427078318 1487887679 1484011617 1476718655 1509845392 1496496626 1583530675 1579588643 1609495371 1559139172 1554135669 1549766410 1566844751 1562161307 1561938937 1123551908 1086169529 1093103602 1202377124 1193780708 1148229310 1144649241 1257633250 1247607861 1241535002 1262624219 1288523504 1299222235 840314050 909401445 926048886 886867060 873099939 979662326 963003815 1012918112 1034467235 1026553732 568519178 650996158 647728822 616596108 617472393 614787483 604041145 633043809 678181561 698401105 776651230 325294125 271242551 291800692 389634988 346041163 344959554 345547011 342290228 354762650 442183586 467158857 412090528 532898841 534371187 32464799 21286066 109721665 127458375 192166356 146495963 142507512 167676030 236532616 262832772] => 1927544832
[1922985547 1934203179 1883318806 1910889055 1983590560 1965316186 2059139291 2075108931 2067514794 2117429526 2140519185 1659645051 1676816799 1611982084 1736461223 1810643297 1753583499 1767991311 1819386745 1355466982 1349603237 1360540003 1453750157 1461849199 1439893078 1432297529 1431882086 1427078318 1487887679 1484011617 1476718655 1509845392 1496496626 1583530675 1579588643 1609495371 1559139172 1554135669 1549766410 1566844751 1562161307 1561938937 1123551908 1086169529 1093103602 1202377124 1193780708 1148229310 1144649241 1257633250 1241535002 1247607861 1262624219 1288523504 1299222235 840314050 909401445 926048886 886867060 873099939 979662326 963003815 1012918112 1034467235 1026553732 568519178 650996158 647728822 616596108 617472393 614787483 604041145 633043809 678181561 698401105 776651230 325294125 271242551 291800692 389634988 346041163 344959554 345547011 342290228 354762650 442183586 467158857 412090528 532898841 534371187 32464799 21286066 109721665 127458375 192166356 146495963 142507512 167676030 236532616 262832772] => -1
Cuối cùng, đây là bốn trường hợp thử nghiệm rất lớn để đảm bảo rằng các bài nộp đủ hiệu quả:
- Trường hợp kiểm tra 1 nên mang lại
-1
. - Trường hợp thử nghiệm 2 nên mang lại
0
. - Trường hợp thử nghiệm 3 nên mang lại
1096442624
. - Trường hợp thử nghiệm 4 nên mang lại
-1
.
Tại sao mọi người sẽ làm điều này?
Một ngày khác, một thao tác XOR có thể "sắp xếp" một mảng, điều này cho phép thực hiện tìm kiếm nhị phân trên mảng trong O (log n) mà không phải sắp xếp trước. Dường như có thể xác địnhN
trong thời gian giả, điều này sẽ làm cho điều này trở thành một sự thay thế nhanh hơn cho hầu hết các thuật toán sắp xếp và nó không có các yêu cầu về bộ nhớ của loại cơ số. Tất nhiên, một tìm kiếm tuyến tính thẳng qua mảng chưa sắp xếp sẽ nhanh hơn, nhưng nếu bạn muốn tìm kiếm cùng một mảng nhiều lần, một tính toán trước tuyến tính duy nhất có thể giảm thời gian cần thiết cho mỗi tìm kiếm.
Thật không may, lớp danh sách này hoạt động khá hạn chế (phân phối ngẫu nhiên thống nhất không có khả năng thừa nhận N
).
Một câu hỏi thú vị là liệu có các chức năng phỏng đoán khác dễ kiểm tra hơn và / hoặc có thể áp dụng cho một danh sách rộng hơn không.