Задать вопрос
  • Как прочитать буфер обмена на Javascript?

    @Proshka17 Автор вопроса
    использую HTTPS
  • Нужно ли шифровать траффик web приложения?

    @Proshka17 Автор вопроса
    А какой смысл?
    Кажется https/wss делает ровно то же самое, нет?
    Есть ли кейс, в котором такое ручное шифрование защитит данные, а https/wss нет?
  • Как делать библиотеки без учёта viewport?

    @Proshka17 Автор вопроса
    Вадим, попробую переформулировать вопрос
    Прописывать стили (размеры например) для html под мобильные устройства без media надо учитывая
    <meta name="viewport" content="width=device-width, initial-scale=1">

    или как будто его нет?
  • Как делать библиотеки без учёта viewport?

    @Proshka17 Автор вопроса
    Вадим, сможете подсказать как правильно бороться с этим?
  • Как делать библиотеки без учёта viewport?

    @Proshka17 Автор вопроса
    Вадим,
    Я написал js библиотеку, которая вставляет html вёрстку ( визуальный элемент) на страницу сайта
    Эту js библиотеку будут интегрировать разные сайты
    Проблема возникает с мобильной версией сайта ( Я разделил элемент для мобильных и не десктопных версий сайтов, с десктопом все ок)
    Мой мобильный html элемент сверстан с учётом
    <meta name="viewport" content="width=device-width, initial-scale=1">
    , но если его на сайте не будет, то моя верстка отобразиться не корректно
    Вопрос, собственно, верстать html, который встраивается на разные мобильные сайты динамически нужно с учётом
    <meta name="viewport" content="width=device-width, initial-scale=1">
    или нет?
  • Как делать библиотеки без учёта viewport?

    @Proshka17 Автор вопроса
    Вадим, Была такая идея
    Но тогда получается надо делать 2 набора стилей в зависимости от наличия тега
    Правильный ли это подход?
    И нет ли другого общепринятого варианта?
  • Как решить задачу на C++ быстрее чем за n^2?

    @Proshka17 Автор вопроса
    wataru, дерево отрезков.
    Я протестировал и получилось в среднем в 2 раза быстрее, чем код выше
  • Как решить задачу на C++ быстрее чем за n^2?

    @Proshka17 Автор вопроса
    wataru, работает, спасибо!
  • Как решить задачу на C++ быстрее чем за n^2?

    @Proshka17 Автор вопроса
    wataru, Переписал.
    Теперь Time Limit на 11 тесте, а раньше был на 7. Чуть чуть продвинулся)
    int main()
    {
     std::ios_base::sync_with_stdio(false);
      ifstream f("input.txt");
      bntree b;
      long long count;
      f >> count;
      long long power;
      f >> power;
      long long type;
      f >> type;
      long long sch = 1;
      unordered_map<long long, long long> mp;
      
      
    
      for (long long i = 1; i <= power; ++i) {
          string val = to_string(i);
          b.insert(sch, val);
          mp.emplace(i, sch);
          sch++;
      }
      sch = -1;
    
    
    
      if (type == 1) {
        for (long long i = 0; i < count; ++i) {
          long long one;
          f >> one;
          long long key = mp[one];
          long long ind = b.search(key);
          cout << ind + 1 << " ";
          b.eraseI(ind);
          string strval = to_string(one);
          b.insert(sch, strval);
          mp[one] = sch;
          sch--;
        }
      }
      else {
        for (long long i = 0; i < count; ++i) {
          long long one;
          f >> one;
          long long key = b.getI(one - 1)->key;
          string res = b.getI(one - 1)->val;
          cout << res << " ";
          b.erase(key);
          b.insert(sch, res);
          sch--;
        }
      }
    
    
      return 0;
    }
  • Как решить задачу на C++ быстрее чем за n^2?

    @Proshka17 Автор вопроса
    wataru, Добрый день!
    Нашел реализацию дерева поиска с индексацией. Все работает, но получаю Time Limit, хотя все операции вроде за log.
    Данная реализация дерева использует в виде ключей строки, поэтому в начале кода я перегрузил операторы сравнения для строк, вот так:
    bool operator> (string& a, string& b) {
      long long d1 = stoll(a);
      long long d2 = stoll(b);
      return d1 > d2;
    }
    
    bool operator< (string& a, string& b) {
      long long d1 = stoll(a);
      long long d2 = stoll(b);
      return d1 < d2;
    }
    
    bool operator== (string& a, string& b) {
      long long d1 = stoll(a);
      long long d2 = stoll(b);
      return d1 == d2;
    }

    И чтобы вставить в начало списка(самым левым в дереве) я уменьшаю глобальный счетчик на 1 и использую to_string(счетчик) как ключ.
    Вот ссылка на дерево:
    https://github.com/dvjdjvu/bntree/tree/master/src

    Код программы main:
    int main()
    {
    
      ifstream f("input.txt");
      bntree b;
      long long count;
      f >> count;
      long long power;
      f >> power;
      long long type;
      f >> type;
    
    
      
      
    
      for (long long i = 1; i <= power; ++i) {
        string key = to_string(sch);
        string val = to_string(i);
        b.insert(key,val);
        mp.emplace(i,key);
        sch++;
      }
      sch = -1;
    
      if (type == 1) {
        for (long long i = 0; i < count; ++i) {
          long long one;
          f >> one;
          string key = mp[one];
          long long ind = b.search(key);
          cout << ind + 1 << " ";
          b.erase(ind);
    
          string newkey = to_string(sch);
          sch--;
          string strval = to_string(one);
          b.insert(newkey, strval);
          mp[one] = newkey;
        }
      }
      else {
        for (long long i = 0; i < count; ++i) {
          long long one;
          f >> one;
          string key = b.get(one-1)->key;
          string res = b.get(one-1)->val;
          cout << res << " ";
          b.erase(key);
          string newkey = to_string(sch);
          sch--;
          b.insert(newkey,res);
        }
      }
    
    
      return 0;
    }


    У вас нету идей, как можно ускорить?
  • Как понять условие задачи?

    @Proshka17 Автор вопроса
    wataru, Мне нужно решить еще одну задачу. Я никак не могу придумать решение быстрее n^2. Если посмотрите, буду очень благодарен!
    Как решить задачу на c++ быстрее чем за n^2?
  • Где у меня может быть ошибка в нахождении площади сложной фигуры?

    @Proshka17 Автор вопроса
    Mercury13, Отметил. Мне нужно решить еще одну задачу, но я никак не могу выбраться из n^2 сложности. Если посмотрите, буду очень благодарен!
  • Как понять условие задачи?

    @Proshka17 Автор вопроса
    wataru, Получилось, огромное спасибо!
  • Как понять условие задачи?

    @Proshka17 Автор вопроса
    wataru, переделал вот так:
    sum = (sum + DP(k - 1, t - v, i - (v > 0) + (v < a[k]), a, N)* tempC) % N;

    Но ответ, все равно не правильный: 300000003
    Вызов же я вроде правильно переделал?
    for (int i{ 1 }; i <= n; ++i)
      {
        p = (p + DP(n, deckSize / 2, 0, deck, N)) % N;
      }
  • Как понять условие задачи?

    @Proshka17 Автор вопроса
    wataru, Сделал, но ответ не правильный, хотя до исправлений был верный:
    #include <fstream>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <chrono> // for std::chrono functions
    
    
    
    long long modExp(long long x, long long y, long long N)
    {
      if (y == 0) return 1;
      long long z = modExp(x, y / 2, N);
      if (y % 2 == 0)
        return (z * z) % N;
      else
      {
        long long zz{ (z * z) % N };
        return (x * zz) % N;
      }
    }
    
    long long modFactorial(int n, long long N)
    {
      static std::vector<long long> memory(251, -1);
      if (n < 251)
      {
        if (memory[n] == -1)
        {
          memory[n] = (n == 1 || n == 0) ? 1 : (modFactorial(n - 1, N) * n) % N;
        }
        return memory[n];
      }
      else
        return (modFactorial(n - 1, N) * n) % N;
    }
    
    long long revModFactorial(int n, long long N)
    {
      static std::vector<long long> revMemory(251, -1);
      if (n < 251)
      {
        if (revMemory[n] == -1)
        {
          revMemory[n] = (revModFactorial(n + 1, N) * (n + 1)) % N;
        }
        return revMemory[n];
      }
      else
        return modExp(modFactorial(n, N), N - 2, N);
    }
    
    
    long long modC(int n, int k, long long N) {
      static	std::vector< std::vector<long long>> modCmemory(251,
        std::vector<long long>(251, -1));
      if (n < k)
        return 0;
      else if (n == k)
        return 1;
      else if (modCmemory[n][k] == -1)
      {
        long long denum{ (revModFactorial(k, N) * revModFactorial(n - k, N)) % N };
        modCmemory[n][k] = (modFactorial(n, N) * denum) % N;
      }
      return modCmemory[n][k];
    }
    
    int sumUpTo(int k, std::vector<int>& a)
    {
      static std::vector<int> sumUpToMemory(k + 1, -1);
    
      if (sumUpToMemory[k] == -1)
      {
        if (k == 0)
          sumUpToMemory[k] = 0;
        else
        {
          int sum{};
          sum = a[k] + sumUpTo(k - 1, a);
          sumUpToMemory[k] = sum;
        }
      }
      return sumUpToMemory[k];
    }
    
    long long DP(int k, int t, int i, std::vector<int>& a, long long N)
    {
      static	std::vector<std::vector<std::vector<long long>>> DPmemory(51,
        std::vector<std::vector<long long>>(251,
          std::vector<long long>(101, -1)));
    
      if ((k < 0) || (t < 0) || (i < -50) || (i > 50)) return 0;
    
      if (DPmemory[k][t][i+50] == -1)
      {
        if (k == 0)
        {
          if ((t == 0) && (i == 0) ) DPmemory[k][t][i+50] = 1;
          else DPmemory[k][t][i+50] = 0;
        }
        else
        {
          long long sum{};
          int min{ std::min(a[k], t) };
          for (int v{ 0 }; v <= min; ++v)
          {
            long long tempC{ (modC(t, v, N) * modC(sumUpTo(k, a) - t, a[k] - v, N)) % N };
            if (tempC > 0)
              sum = (sum + DP(k - 1, t - v, i - (v > 0) - (v < a[k]), a, N)* tempC) % N;
    
          }
          DPmemory[k][t][i+50] = sum;
        }
      }
      return DPmemory[k][t][i+50];
    }
    
    
    
    int main()
    {
    
    
      //Input optimization
      std::ios_base::sync_with_stdio(false);
    
      //Reading from file
      std::ifstream input("input.txt");
      std::stringstream strStream;
      strStream << input.rdbuf();
    
      int n;										//n - number of cardTypes
      strStream >> n;
      std::vector<int> deck(n + 1);
      int deckSize{};
      for (int cardType{ 1 }; cardType <= n; ++cardType)
      {
        strStream >> deck[cardType];
        deckSize += deck[cardType];
      }
    
    
      long long N{ 1000000007 };
      long long p{};
      long long rq{ revModFactorial(deckSize, N) };
      for (int cardType{ 1 }; cardType <= n; ++cardType)
      {
        rq = (rq * modFactorial(deck[cardType], N)) % N;
      }
    
    
    
      for (int i{ 1 }; i <= n; ++i)
      {
        p = (p + DP(n, deckSize / 2, 0, deck, N)) % N;
      }
    
    
      std::cout << (p * rq) % N << "\n";
    
    
    
      return 0;
    }

    Ошибка для колоды
    1 2 3
    Выводит 0 вместо 100000001
  • Как понять условие задачи?

    @Proshka17 Автор вопроса
    if ((k < 0) || (t < 0) || (i < 0) || (j < 0)) return 0;
    Навероне можно заменить на
    if ((k < 0) || (t < 0) || (i < -50) || (i > 50) ) return 0;
  • Как понять условие задачи?

    @Proshka17 Автор вопроса
    wataru, Вроде сделал, но не могу понять пару моментов:
    #include <fstream>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <chrono> // for std::chrono functions
    
    
    
    long long modExp(long long x, long long y, long long N)
    {
      if (y == 0) return 1;
      long long z = modExp(x, y / 2, N);
      if (y % 2 == 0)
        return (z * z) % N;
      else
      {
        long long zz{ (z * z) % N };
        return (x * zz) % N;
      }
    }
    
    long long modFactorial(int n, long long N)
    {
      static std::vector<long long> memory(251, -1);
      if (n < 251)
      {
        if (memory[n] == -1)
        {
          memory[n] = (n == 1 || n == 0) ? 1 : (modFactorial(n - 1, N) * n) % N;
        }
        return memory[n];
      }
      else
        return (modFactorial(n - 1, N) * n) % N;
    }
    
    long long revModFactorial(int n, long long N)
    {
      static std::vector<long long> revMemory(251, -1);
      if (n < 251)
      {
        if (revMemory[n] == -1)
        {
          revMemory[n] = (revModFactorial(n + 1, N) * (n + 1)) % N;
        }
        return revMemory[n];
      }
      else
        return modExp(modFactorial(n, N), N - 2, N);
    }
    
    
    long long modC(int n, int k, long long N) {
      static	std::vector< std::vector<long long>> modCmemory(251,
        std::vector<long long>(251, -1));
      if (n < k)
        return 0;
      else if (n == k)
        return 1;
      else if (modCmemory[n][k] == -1)
      {
        long long denum{ (revModFactorial(k, N) * revModFactorial(n - k, N)) % N };
        modCmemory[n][k] = (modFactorial(n, N) * denum) % N;
      }
      return modCmemory[n][k];
    }
    
    int sumUpTo(int k, std::vector<int>& a)
    {
      static std::vector<int> sumUpToMemory(k + 1, -1);
    
      if (sumUpToMemory[k] == -1)
      {
        if (k == 0)
          sumUpToMemory[k] = 0;
        else
        {
          int sum{};
          sum = a[k] + sumUpTo(k - 1, a);
          sumUpToMemory[k] = sum;
        }
      }
      return sumUpToMemory[k];
    }
    
    long long DP(int k, int t, int i, std::vector<int>& a, long long N)
    {
      static	std::vector<std::vector<std::vector<long long>>> DPmemory(51,
        std::vector<std::vector<long long>>(251,
          std::vector<long long>(101, -1)));
    
      if ((k < 0) || (t < 0) || (i < 0) || (j < 0)) return 0;
    
      if (DPmemory[k][t][i+50] == -1)
      {
        if (k == 0)
        {
          if ((t == 0) && (i == 0) && (j == 0)) DPmemory[k][t][i+50] = 1;
          else DPmemory[k][t][i+50] = 0;
        }
        else
        {
          long long sum{};
          int min{ std::min(a[k], t) };
          for (int v{ 0 }; v <= min; ++v)
          {
            long long tempC{ (modC(t, v, N) * modC(sumUpTo(k, a) - t, a[k] - v, N)) % N };
            if (tempC > 0)
              sum = (sum + DP(k - 1, t - v, i - (v > 0) - (v < a[k]), a, N)* tempC) % N;
    
          }
          DPmemory[k][t][i+50] = sum;
        }
      }
      return DPmemory[k][t][i+50];
    }
    
    
    
    int main()
    {
    
    
      //Input optimization
      std::ios_base::sync_with_stdio(false);
    
      //Reading from file
      std::ifstream input("input.txt");
      std::stringstream strStream;
      strStream << input.rdbuf();
    
      int n;										//n - number of cardTypes
      strStream >> n;
      std::vector<int> deck(n + 1);
      int deckSize{};
      for (int cardType{ 1 }; cardType <= n; ++cardType)
      {
        strStream >> deck[cardType];
        deckSize += deck[cardType];
      }
    
    
      long long N{ 1000000007 };
      long long p{};
      long long rq{ revModFactorial(deckSize, N) };
      for (int cardType{ 1 }; cardType <= n; ++cardType)
      {
        rq = (rq * modFactorial(deck[cardType], N)) % N;
      }
    
    
    
      for (int i{ 1 }; i <= n; ++i)
      {
        p = (p + DP(n, deckSize / 2, 0, deck, N)) % N;
      }
    
    
      std::cout << (p * rq) % N << "\n";
    
    
    
      return 0;
    }


    На что заменить
    if ((k < 0) || (t < 0) || (i < 0) || (j < 0)) return 0;
    С учетом нового значения i?
    И на что заменить if ((t == 0) && (i == 0) && (j == 0)) DPmemory[k][t][i+50] = 1;
  • Как понять условие задачи?

    @Proshka17 Автор вопроса
    wataru, Добрый день!
    Я попробовал решение, которое предложил alexbirdie, но пока получил Time Limit на 13 тесте.
  • Где у меня может быть ошибка в нахождении площади сложной фигуры?

    @Proshka17 Автор вопроса
    Добрый день!
    Все получилось, нужно было добавить сортировку точек пересечения.
    Мне осталось решить задачу про карты Как понять условие задачи?, если вы с ней поможете буду очень благодарен!