Еще одна задача
Вот вчера наткнулся на очень простенькую, но с изюменкой задачу. Хочу предложить ее уважаемым почитателям и пописателям форума.
Есть масив на 10000 елементов (целые числа в диапазоне от -10000 до +10000).
Нам зададут 100000 вопросов такого плана.
Найти суму чисел от i-того до j-ного елементов масива. Находить ответы надо очень быстро чтоб в 1с вложытся со всеми 100000 вопросами. Плюс памяти у нас токо 1 метр.
Просьба тех кто сразу понял как ето делать не ваыкладывать метод, а только его сложность.
Задачу нашел на
http://acm.timus.ru/problem.aspx?space=1&num=1330&locale=ru
Спасибо за внимание. Надеюсь Вам будет интересно.
Да. Помойму последнее время пошла мода на алгоритмы :)
Вот вчера наткнулся на очень простенькую, но с изюменкой задачу. Хочу предложить ее уважаемым почитателям и пописателям форума.
Есть масив на 10000 елементов (целые числа в диапазоне от -10000 до +10000).
Нам зададут 100000 вопросов такого плана.
Найти суму чисел от i-того до j-ного елементов масива. Находить ответы надо очень быстро чтоб в 1с вложытся со всеми 100000 вопросами. Плюс памяти у нас токо 1 метр.
Просьба тех кто сразу понял как ето делать не ваыкладывать метод, а только его сложность.
Задачу нашел на
http://acm.timus.ru/problem.aspx?space=1&num=1330&locale=ru
Спасибо за внимание. Надеюсь Вам будет интересно.
Задача и впрямь интересная, стоит посмотреть!!!
если наличие сайта acm.timus.ru для тебя - признак моды на алгоритмы :))) то поизучай историю движения олимпиад АСМ и пойми, что, как программист, ты просто не имеешь права не знать об этих олимпиадах. для тренировки такие сайты как Тимус и есть)
а предложенная задача - очень простая задача с последнего школьного екатеринбургского АСМ-контеста. на этом сервере кстати еще больше 4 сотен задача уровня от очень простых до очень сложных. удачи!
:))))
если наличие сайта acm.timus.ru для тебя - признак моды на алгоритмы :))) то поизучай историю движения олимпиад АСМ и пойми, что, как программист, ты просто не имеешь права не знать об этих олимпиадах.
Я не имел в виду наличие сайта Тимус (он ведь уже давно существует). Я имел ввиду теми "Розминка для ума" и "Саперская задача".
Про айсиемки я слишал и даже немножко участвовал. Но истории их я не знаю.
А тему создал чтобы еще когото заинтересовать.
Потому то и задача простая. А еще потому что сложную я сам не смогу решить :(
предложенная задача - очень простая задача
А не мог бы Ты выложить свое решение?
Мне в голову пришла пока только одна мысль по решению этой задачи. Это сделать промежуточные массивы в которых буду суммы елементов 1и2 3и4 (массив 1), 1и4, 5и8 (массив 2) и т.д. Причем заполнять их можно по ходу получения вопросов, но над этим еще можно подумать. Вот. Теперь по запросу можна несколькими вічислениями дать ответ.
Думаю есть более быстрое и красивое решение. Поделишся своим?
сделать промежуточные массивы в которых буду суммы елементов 1и2 3и4 (массив 1), 1и4, 5и8 (массив 2) и т.д.
Ладно давай абстрагироватсмя.
Пусть длинна вектора N, а количество вопросов M.
И пусть N есть степень двойки.
Тогда в твоей матрице будет log(n) строчек.
В первой строчке N елементов, во второй N/2, в последней 1 = сума всей матрицы.
Памяти для матрици надо N*2-1 чисел.
Для нахождения каждого елемента (кроме первой строчки) надо сумировать
два числа с предыдущей строчки. Итого N-1 операцый.
Для каждого вопроса надо искать суму по етой матрице.
Как Ты собираешся ето делать ?
Если можно то приводи код с подробными коментариями. Мне так легче понимать Твои мысли.
ЗЫ. Ксати я сначала тоже хотел сделать так как Ты предлогаеш, но есть лутший вариант.
Он может прити в голову когда будеш думать как искать суму по Твоей матрице.
Не знаю почему, но я додумался именно в етот момент.
создаём матрицу из n элементов - сумм исходной матрицы от 1ой до Iой позиции .(выч. сложность- n-1)
Каждый запрос тогда выполняется как разность двух элементов этой матрицы .Полная выч. сложнось = n-1+m = 10000-1+100000 . :D Вот и вся задачка .
ужас какой алгоритм ))
создаём матрицу из n элементов - сумм исходной матрицы от 1ой до Iой позиции .(выч. сложность- n-1)
Каждый запрос тогда выполняется как разность двух элементов этой матрицы .Полная выч. сложнось = n-1+m = 10000-1+100000 . :D Вот и вся задачка .
Совершенно идеально :)
Есть прямоугольник N x N (ето план города). На нем позначени дома (1 - есть дом 0 - нет дома)
Дома могут бить одиночными, прямыми или уголками.
Пример
1 1 1 0 1
0 0 0 0 1
0 1 0 1 1
0 0 0 0 0
Здесь три дома (по одному каждого вида). Никаких других домов нет (Ну типа буквой Т или Ш или П).
Пома не соприкасаются даже уголками.
Нужно пощитать количество домов-уголков, естественно с минимальной сложностю.
Также попробуйте написать програму без операторов if.
ужас какой алгоритм ))
создаём матрицу из n элементов - сумм исходной матрицы от 1ой до Iой позиции .(выч. сложность- n-1)
Каждый запрос тогда выполняется как разность двух элементов этой матрицы .Полная выч. сложнось = n-1+m = 10000-1+100000 . :D Вот и вся задачка .
а я не допер... :(
Также попробуйте написать програму без операторов if.
Тут идейка сразу пришла.
буду считать что имеею этот массив с окаймлющими нулями (что бы не проверять выход за массив)
Алгоритм очеть прост: делаем переменню N, проходим каждую ячейку и записываем такое N=m[x-][y]*m[x][y-1]+m[x][y-1]*m[x+1][y] + m[x+1][y+1]*m[x][y+1]+m[x][y+1]*m[x-1][y].
Понятным языком: для каждой ячейки проверяем сумму произведений четерех сторон. Только для углового домика эта сумма будет 1.
Тут идейка сразу пришла.
буду считать что имеею этот массив с окаймлющими нулями (что бы не проверять выход за массив)
Алгоритм очеть прост: делаем переменню N, проходим каждую ячейку и записываем такое N=m[x-][y]*m[x][y-1]+m[x][y-1]*m[x+1][y] + m[x+1][y+1]*m[x][y+1]+m[x][y+1]*m[x-1][y].
Понятным языком: для каждой ячейки проверяем сумму произведений четерех сторон. Только для углового домика эта сумма будет 1.
Вообщето ДА. Так роботать будет. И ифов не надо. А поробуй придумать более простую формулу. Она есть.
goto можно юзать? или свич кейс?
goto юзай на здорове, а свич кейс нет. И не делей пожалуйста ифов ассемблерными вставками :)
goto юзай на здорове, а свич кейс нет. И не делей пожалуйста ифов ассемблерными вставками :)
Вот времена пошли! Теперь ассемблер за язык программирования не считают. А ведь он дедушка тех языков, на которых сейчас кодите вы! ) ай-ай-ай %)
Вот времена пошли! Теперь ассемблер за язык программирования не считают. А ведь он дедушка тех языков, на которых сейчас кодите вы! ) ай-ай-ай %)
:D Да нет. Кто ассемблер обидет, тому чтоб век без горячих клавиш роботать. Просто чтоб програма без явных ветвлений была. Циклы впринцыпе тоже ветвления, но их можно. :)
:D Да нет. Кто ассемблер обидет, тому чтоб век без горячих клавиш роботать. Просто чтоб програма без явных ветвлений была. Циклы впринцыпе тоже ветвления, но их можно. :)
т.е. как я понял без подпрограмм вообще? значит стек не юзать? ) оки, а goto можно сделать и if, и switch, и цикл и даже рекурсию фиксированной глубины, так что лучше сказать "нет" моему goto ;)
т.е. как я понял без подпрограмм вообще? значит стек не юзать? ) оки, а goto можно сделать и if, и switch, и цикл и даже рекурсию фиксированной глубины, так что лучше сказать "нет" моему goto ;)
А как Ты через ИдтиНа хочеш иф сделать ?
Масив адресов в сегменте кода и
Goto labels[i+int(условие)] ???
ЗЫ. Впринцыпе Матюш уже ту задачу решил. Может кто просто формулу попроще приведет.
ЗЫ ЗЫ. Если у кого есть интересные задачи то предлагаю вешать их в ету тему. Интересно получится может. Только давайте вешать по одной. Чтоб хаоса не создавать.
А как Ты через ИдтиНа хочеш иф сделать ?
...Только давайте вешать по одной. Чтоб хаоса не создавать.
Т.е. как это "как"? а чем еще, позволю поинтересоваться? конечно, проверкой остатка от деления через goto.
Ну давайте) У меня есть задачка, но она, боюсь, слишком сложная.. ;)
Ну давайте) У меня есть задачка, но она, боюсь, слишком сложная.. ;)
если эта задачка имеет елегантное решение, то пость
если эта задачка имеет елегантное решение, то пость
а ничего что задание на английском?
а ничего что задание на английском?
Тогда переведи ,плиз . У мя с англицким туго .В школе немецкий учил , а в универе по англицкому преподку еле на тройку натянул .:(
а ничего что задание на английском?
Думаю что ничего. Каждый переведет его по своему и будет у нас несколько задач :)
Текст:
A standard set of Double Six dominoes contains 28 pieces (called bones)
each displaying two numbers from 0 (blank) to 6 using dice-like pips. The 28
bones, which are unique, consist of the following combinations of pips:
Bone # Pips Bone # Pips Bone # Pips Bone # Pips
1 0 | 0 8 1 | 1 15 2 | 3 22 3 | 6
2 0 | 1 9 1 | 2 16 2 | 4 23 4 | 4
3 0 | 2 10 1 | 3 17 2 | 5 24 4 | 5
4 0 | 3 11 1 | 4 18 2 | 6 25 4 | 6
5 0 | 4 12 1 | 5 19 3 | 3 26 5 | 5
6 0 | 5 13 1 | 6 20 3 | 4 27 5 | 6
7 0 | 6 14 2 | 2 21 3 | 5 28 6 | 6
All the Double Six dominoes in a set can he laid out to display a 7 x 8
grid of pips. Each layout corresponds at least one ÒmapÓ of the dominoes. A
map consists of an identical 7 x 8 grid with the appropriate bone numbers
substituted for the pip numbers appearing on that bone. An example of a 7 x 8
grid display of pips and a corresponding map of bone numbers is shown below.
7 x 8 grid of pips map of bone numbers
6 6 2 6 5 2 4 1 28 28 14 7 17 17 11 11
1 3 2 0 1 0 3 4 10 10 14 7 2 2 21 23
1 3 2 4 6 6 5 4 8 4 16 25 25 13 21 23
1 0 4 3 2 1 1 2 8 4 16 15 15 13 9 9
5 1 3 6 0 4 5 5 12 12 22 22 5 5 26 26
5 5 4 0 2 6 0 3 27 24 24 3 3 18 1 19
6 0 5 3 4 2 0 3 27 6 6 20 20 18 1 19
Write a program that will analyze the pattern of pips in any 7 x 8 layout
of a standard set of dominoes and produce a map showing the position of all
dominoes in the set. If more than one arrangement of dominoes yield the same
pattern, your program should generate a map of each possible layout.
Input and Output
The input file will contain several of problem sets. Each set consists of
seven lines of eight integers from 0 through 6, representing an observed
pattern of pips. Each set is corresponds to a legitimate configuration of
bones (there will be at least one map possible for each problem set). There is
no intervening data separating the problem sets.
Correct output consists of a problem set label (beginning with Set #1)
followed by an echo printing of the problem set itself. This is followed by a
map label for the set and the map(s) which correspond to the problem set.
(Multiple maps can be output in any order.) After all maps for a problem set
have been printed, a summary line stating the number of possible maps appears.
At least three lines are skipped between the output from different problem
sets while at least one line separates the labels, echo printing, and maps
within the same problem set. A sample input file of two problem sets along
with the correct output are shown on the reverse of this page.
Sample Input Sample Output
5 4 3 6 5 3 4 6 Layout #1:
0 6 0 1 2 3 1 1
3 2 6 5 0 4 2 0 5 4 3 6 5 3 4 6
5 3 6 2 3 2 0 6 0 6 0 1 2 3 1 1
4 0 4 1 0 0 4 1 3 2 6 5 0 4 2 0
5 2 2 4 4 1 6 5 5 3 6 2 3 2 0 6
5 5 3 6 1 2 3 1 4 0 4 1 0 0 4 1
4 2 5 2 6 3 5 4 5 2 2 4 4 1 6 5
5 0 4 3 1 4 1 1 5 5 3 6 1 2 3 1
1 2 3 0 2 2 2 2
1 4 0 1 3 5 6 5 Maps resulting from layout #1 are:
4 0 6 0 3 6 6 5
4 0 1 6 4 0 3 0 6 20 20 27 27 19 25 25
6 5 3 6 2 1 5 3 6 18 2 2 3 19 8 8
21 18 28 17 3 16 16 7
21 4 28 17 15 15 5 7
24 4 11 11 1 1 5 12
24 14 14 23 23 13 13 12
26 26 22 22 9 9 10 10
There are 1 solution(s) for layout #1.
Layout #2:
4 2 5 2 6 3 5 4
5 0 4 3 1 4 1 1
1 2 3 0 2 2 2 2
1 4 0 1 3 5 6 5
4 0 6 0 3 6 6 5
4 0 1 6 4 0 3 0
6 5 3 6 2 1 5 3
Maps resulting from layout #2 are:
16 16 24 18 18 20 12 11
6 6 24 10 10 20 12 11
8 15 15 3 3 17 14 14
8 5 5 2 19 17 28 26
23 1 13 2 19 7 28 26
23 1 13 25 25 7 4 4
27 27 22 22 9 9 21 21
16 16 24 18 18 20 12 11
6 6 24 10 10 20 12 11
8 15 15 3 3 17 14 14
8 5 5 2 19 17 28 26
23 1 13 2 19 7 28 26
23 1 13 25 25 7 21 4
27 27 22 22 9 9 21 4
There are 2 solution(s) for layout #2.