Нет, 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 - какие-то коэффициенты. Чтобы их найти, придётся немного посчитать, но при наличии хорошей системы компьютерной алгебры это можно сделать за несколько часов (или даже быстрее - если система хорошо знакома).
Числа, начинающиеся с нуля, были отсеяны в инициализации массива A. A[1] - это количество чисел, оканчивающихся на нуль.
А свою длинную арифметику писать незачем, достаточно использовать double.