с коровами сделал без двоичного поиска... работает меньше половины секунды перебирая до 200000 пеньков...<_<
на самом деле я не думаю что с двоичным поиском будет намного быстрее, скорее будет просто сложнее код... а при надолбовании этого кода у вас будет больше 50 строк 100%!!! я пытался делать как сказал дядя дима но потом зарылся в ошибках так что лучше использовать обычный умный-тупой перебор Добавлено (29.01.2010, 23:22)
---------------------------------------------
вот сделал чисто математическое , УЛЬТРОбыстрое решение для сканера-принтера...
Эта задача самая весёлая из всех которые задавались в этом году
не думаю что можно решить это заданее ещё лучше.
даааа... это того стоило я пошёл спать
Добавлено (30.01.2010, 00:31)
---------------------------------------------
Сон отменяется
вы видите здесь БАГ? А ОН ЕСТЬ, так считает компилятор...
я ни как не могу найти место на котором оно зацикливается!!!(((
open List;;
let rec creat_list n =
if n=0 then [] else (Random.int 1)::(creat_list (n-1));;
(* spisok *)let a = creat_list 2;;
(* kol-vo korov *)let c = 2;;
let rec summa l =
match l with
l1::ls->l1+(summa ls)
|[]->0;;
let rec korova spisok n z =
let rec korova2 spisok m n z =
if n=0 then true else
(match spisok with
l1::ls->let s = (l1+m) in if s>=z then korova2 ls 0 (n-1) z
else korova2 ls s n z
|[]-> false) in
korova2 spisok 0 n z;;
let rec element n =
if n mod 2 = 0 then n/2 else (n-1)/2;;
let rec poisk spisok kor n m z =
if m-n=1 then z else (
let s = (element (n+m)) in if korova spisok kor s
then poisk spisok kor s m s else poisk spisok kor n s z);;
poisk a c 0 (summa a) 1;;
Добавлено (30.01.2010, 23:38)
---------------------------------------------
ну вот, ппц , оказалось что ошибка элементарная: Random.int 1 я то думал это будет список из единиц....
в общем я исправил и всё заработало