Алексей: Или я чего-то очень не понимаю, или она будет печатать
10/10/10/10/10/950
20/20/20/20/20/900
...
190/190/190/190/190/50
- и больше ничего (если порядок не важен). То есть, 5 чисел всегда будут одинаковы.
ewb: А что же тогда значит "рассчитать и зафиксировать"? При подсчёте количества способов сами эти способы вы не увидите.
А количество считается так.
Будем считать, что горизонтальная сторона прямоугольника короче вертикальной. Рассмотрим конфигурации, обладающие следующими свойствами:
- нижние k-1 рядов полностью заполнены
- в k-м ряду заполнены клетки b1,b2,..,br (обозначим их множество S)
- в k-м ряду нет ни одной горизонтальной плитки
- все ряды выше k-го пустые.
Нам надо для каждой пары (k,S) посчитать количество допустимых способов P(k,S) заполнения этой фигуры. Для этого для любой пары множеств (S1,S2) считаем число способов R(S1,S2), которыми конфигурацию из (k,S1) можно превратить в (k+1,S2). Это число не зависит от k.
Например, если прямоугольник имеет ширину 3, то
R({},{1})=R({},{3})=R({},{1,2,3}=1
R({1},{})=R({1},{2,3})=1
R({2},{1,3})=1
R({3},{})=R({3},{1,2})=1
R({1,2},{3})=R({1,3},{2})=R({2,3},{1})=1
R({1,2,3},{})=1
Для остальных пар множеств R(S1,S2)=0.
Исходно у нас есть P(1,{})=1. Надо найти P(H+1,{}), где H - высота прямоугольника. Для этого перебираем k от 1 до H, и зная P(k,S) для всех S, находим P(k+1,S) опять же для всех S. Или просто возводим матрицу перехода в степень H.
Нет, N - число игроков. Размер шага здесь считается равным 1, при печати все числа придётся умножить на 10. output(A) - функция, которая должна печатать массив A, или делать с ним что-то ещё - вам виднее, что именно. Её напишите сами.
Возьмите пирамидку с вершинами (0,0,0),(0,0,1),(1,0,1),(0,1,1). Для трёх её граней величина (x1*(y2*z3-y3*z2)+x2*(y3*z1-y1*z3)+x3*(y1*z2-y2*z1)) будет равна нулю (для них x1=y1=z1=0), а для четвёртой - единице. Объём пирамиды равен (S*h)/3=(1/2*1)/3=1/6. Поэтому и приходится делить на 6=3! . На плоскости делили бы на два.
А проще всего код получается, если искомые точки сложить в тот же массив, что и концы отрезков (со вторым числом 0 и третьим - индексом точки) и отсортировать всю кучу. Можно уложиться в один экран на C :)
STL расшифровывается как "стереолитография", то есть рассчитан на описание поверхностей реальных тел. Контроля замкнутости и отсутствия самопересечений в самом формате нет, но теоретически, такие модели (с краями или самопересечениями) должны считаться некорректными.
Да и как определить объём тела "с самопересечением"? Убрать все внутренние плёнки, поменять неправильную ориентацию внешних частей (если она есть) и посчитать объём тела, ограниченного только внешней поверхностью? Наверное, какие-нибудь дорогие пакеты это умеют.
Не будет работать для невыпуклых тел. А как считать объём выпуклой оболочки (да и саму оболочку) вручную, "не разбираясь в 3d", трудно даже представить.
Если условие, по которому "равны два объекта" для какого-нибудь поля имеет вид, например, ((a.X<0 && b.X<0) || a.X==b.X) (т.е. если поля отрицательны, то они считаются равными независимо от их конкретных значений), то хеш придётся специально изобретать - просто так ввести в него поле X не получится. А если условие ещё сложнее, когда сравниваются комбинации полей, одни поля сравниваются при определённых условиях на другие поля, и т.п. - то в конечном итоге мы рискуем получить задачу поиска канонического представления объекта. И в общем виде она может оказаться неразрешимой :(
А если ситуация более простая - когда мы сравниваем только определённые поля объектов и структур, то функцию сравнения, скорее всего, можно "поднять" до функции порядка (например, лексикографически по результатам сравнения отдельных полей). И после этого сортировать массивы уже без всякого хеша.
Это из C#. Какие аналоги на Python, я не знаю.
1) char[,] - двумерный массив с индексами от 0 до 2 по каждой координате. Тип массива - символ.
2) (char)('a'+a%3) - прибавляем к коду символа 'a' остаток от деления a на 3. Если a%3==0, то получим тот же символ 'a', если a%3==1, то 'b', а если a%3==2, то 'c'.
3) функция, которая делает с матрицей то, что вам надо. Например, печатает.
"перестановка" и "таблица Келли" - термины из высшей алгебры, более конкретно - из теории групп (конечных).
Про "выборку с повторением" затрудняюсь ответить. Судя по всему, это комбинаторика, но насколько устоявшиеся в этой науке термины соответствуют современному языку программистов, я не разбирался.
Мне тоже непонятно. Если бы было 9 символов, можно было бы понять (9! матриц). Матрица, в которой каждая строчка - перестановка, но строчки друг с другом не связаны - странная постановка. Латинские квадраты 3*3? Их совсем немного. Какие-нибудь таблицы Кэлли? Тоже маловато будет. А пример, приведённый в вопросе, является как раз выборкой с повторениями.
Если вы сами можете выбирать размер ставок, и если ваш капитал неограничен, то беспроигрышной будет стратегия Мартингейла: https://ru.wikipedia.org/wiki/%CC%E0%F0%F2%E8%ED%E...
В ней игрок получает итоговый доход в 1 рубль за каждый выигрыш независимо от того, сколько проигрышей было перед ним
Это понятно. И оба уравнения, которые я написал, это учитывают. Но вопрос в том, как определяется оставшаяся степень свободы - ещё одной точкой, через которую должна пройти кривая, или как-нибудь иначе (слайдером регулировки параметра?)
Не совсем классическая. Хотя с помощью этой задачи классическую решить можно - заливаем сколько-то топлива, смотрим, может ли он объехать все города. И делением пополам находим оптимальный маршрут.
Здесь может быть проблема с "количество не определено заранее". Обычно это означает, что числа нельзя сохранить в массив (а тем более, отсортировать его). К сожалению, эту задачу конечным автоматом решить нельзя. А если хочется обрабатывать числа по одному и сообщить, когда нужные три числа появятся, то пригодилось бы какое-нибудь дерево поиска.
Пусть мы уже посчитали числа длины N-1. На 0 кончается a0 чисел, на 1 - a1,... на 9 - a9 чисел. Тогда среди чисел длины N на 0 будет заканчиваться a0+a1, на 1 - a0+a1+a2,..., на 9 - a8+a9 чисел. Обозначим вектор-столбец (a0,a1,...,a9) как v{N-1}, а (a0+a1, a0+a1+a2,..., a8+a9) как vN. Нетрудно увидеть, что vN=M*v{N-1}, где M - матрица, описанная выше. Если v1=(0,1,1,...,1) - вектор, содержащий количество чисел длины 1 (все цифры кроме нуля), то получим, что vN=M^(N-1)*v1. Осталось найти сумму его координат - для этого умножим вектор слева на строку (1,1,1...,1). И получим формулу с матрицей.
Чтобы получить формулу без матрицы, надо перейти в её жорданов базис - найти собственные значения и собственные векторы. Собственные значения будут корнями характеристического многочлена (z^5-6*z^4+10*z^3-z^2-6*z+1)*(z^5-4*z^4+2*z^3+5*z^2-2*z-1). В конечном итоге, формула будет выглядеть как S(N)=sum(ci*zi^N), где zi - корни многочлена, а ci - какие-то коэффициенты. Чтобы их найти, придётся немного посчитать, но при наличии хорошей системы компьютерной алгебры это можно сделать за несколько часов (или даже быстрее - если система хорошо знакома).
10/10/10/10/10/950
20/20/20/20/20/900
...
190/190/190/190/190/50
- и больше ничего (если порядок не важен). То есть, 5 чисел всегда будут одинаковы.