Skip to content

Instantly share code, notes, and snippets.

View KolosovAO's full-sized avatar

Aleksei Kolosov KolosovAO

  • JettyCloud
  • Tbilisi
View GitHub Profile
# Вначале нужно найти сколько баллов можно набрать, если сдать все на минимум.
# Оставшиеся баллы можно расскидать между заданиями.
# Количество вариантов будет равно числу сочетаний с повторениями:
# (n + k - 1)! / k!(n - 1)!

def fact(n):
    if n < 2:
        return 1
    return n * fact(n - 1)
/*
  Первая проведенная линия будет иметь 0 пересечений, вторая - 1 + 2 + 3 + ... до n - 1,
  т.к. до этого была проведена только одна линия,
  третья - в два раза больше чем предыдущая, и так далее до m - 1.
  Первое - решение в лоб.
  Второе - (1 + 2 + .. + n - 1) * (1 + 2 + .. + m - 1) = n(n - 1)/2 * m(m-1)/2 = mn(m-1)(n-1)/4
*/
function solve(n, m) {
    let count = 0;
# создается массив путей [n]
# каждый возможный следующий путь записывается в новый сет
# если в одном из путей n стало равно 1, возвращается количество шагов

def solve(n):
    ways = [n]
    count = 0

    while(True):
function findBest(n, count, res) {
    if (res.min && res.min <= count) return; // destroy senseless ways
    if (n === 1) {
        res.min = res.min ? Math.min(res.min, count) : count;
        return;
    }
    if (n % 3 === 0)  {
        findBest(n / 3, count + 1, res);
    }
/*
    Создается словарь в котором, ключом будет значение элемента массива, а значением количество вхождений.
    Если значение в словаре на какой-либо из итераций больше N/2, то возвращается текущий элемент.
    Если по окончании итераций мажоритарный элемент не найден - выбрасывается сообщение об ошибке.
*/

function solve(arr) {
    const majoritarCount = Math.floor(arr.length / 2);
    const dict = {};
// http://e-maxx.ru/algo/necklace_colouring

const gcd = (a, b) => !b ? a : gcd(b, a % b);
function solve(n) {
    if (n === 0) return 1; // or maybe zero??
    let res = 0;
    for (let i=1; i<=n; i++) {
        res += 2**gcd(i, n);
    }
/*
    for example:
    [1, 15, 17, 10, 25]
    group like:
        1: {
            less: [15, 17], (1 < 5, 1 < 7)
            eq: [1],
            more: [10] (1 > 0)
        }
function findPlace(x, arr) {
    const len = arr.length;
    if (!len || x > arr[0]) return 1;
    if (x <= arr[len - 1]) return len + 1;

    const pivot = midPivot(arr.length);
    // const pivot = randomPivot(arr.length);
 
    if (arr[pivot] < x) {
/*
    Маленькие треугольники образованные при пересечении прямых подобны большим.
    Основание можно представить как k*w и (1-k)*w.
    Поскольку имеется высота, то выражать коэффициент подобия резонно через высоту.
    Первый коээфициент равен h/(w^2-m^2)^.5
    Второй равен h/(w^2-n^2)^.5
    (1 - k) = h/(m^2-w^2)^.5
    k = h/(n^2-w^2)^.5
    Из этого следует равенство: