• Как исправить вывод кириллицы в консоль?

    @impelix Автор вопроса
    Dmitrii, сразу после int main() написал
    Написано
  • Как исправить вывод кириллицы в консоль?

    @impelix Автор вопроса
    mayton2019, оказалось что файл просто не открывается, так как в оригинальном файле записан весь Онегин, а в примере который я здесь привел только его часть.
    Написано
  • Как решать подобные задачи?

    @impelix Автор вопроса
    единственный момент не понятен, как считать шаг x
    Написано
  • Как решать подобные задачи?

    @impelix Автор вопроса
    знаю что += и -= нельзя, это пример просто
    Написано
  • Как решать подобные задачи?

    @impelix Автор вопроса
    Грубо говоря что то похожее.
    int main(){
        int l = 1, r = 1000000000;
        int m = (l + r) /2;
        int x = 50000000000;
        int k;
        int sum = 100;
        int pred;
        cout << "run " << x;
        cin >> k;
        while(l != r) {
            if (floor(x / m) > k) {
                cout << "run " << x += x/2;
                fflush(stdout);
                l = m;
                m = (l + r) / 2;
                sum += x;
                pred = k;
                cin >> k
            } else if (floor(x / m) < k) {
                cout << "run " << x -= x/2;
                fflush(stdout);
                pred = k;
                r = m;
                m = (l + r) / 2;
                sum += x;
                cin >> k;
            } else if (floor(x / m) == k) {
                cout << "run " << m - x % m;
                fflush(stdout);
                cin >> k;
                if (k - pred == 1) {
                    r = m;
                    m = (l + r) /2;
                    x += x/2
                }
                else{
                    l = m + 1;
                    m = (l + r) /2;
                    x -= x/2
                }
            }
        }
    }
    Написано
  • Как решать подобные задачи?

    @impelix Автор вопроса
    Rsa97, 10^9 ограничение
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    Условие:
    Один из используемых форматов заключается в следующем: число задаётся группами подряд идущих в
    десятичной записи цифр. То есть число 111 задаётся как 3 1, чисор 2020 — как 1 2 1 0 1 2 1 0, число 222 233
    как 4 2 2 3. Отметим, что длина группы должна быть максимальной, то есть запись 2 2 2 2 2 3 в последнем
    случае является некорректной.
    Для проверки ответов игроков Вам требуется написать программу, складывающую числа в вышеописанном
    формате
    Формат входных данных:
    Первая строка входных данных содержит целое число N — количество групп одинаковых цифр в записи
    первого слагаемого (1 ≤ N ≤ 100). i-я из последующих N строк содержит по два целых числа ni и di
    (1 ≤ ni ≤ 10^18 , 0 ≤ di ≤ 9). Гарантируется, что соседние di всегда различны, di != 0 и сумма всех ni не превосходит 10^18
    В таком же формате идет второе слагаемое.
    Вывод нужен в формате таком же как и ввод
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    Wataru, превышен лимит по памяти(memory limit exceed). Я переписал код, используя осноания для оптимизации(хранил числа в интах максимально возможные, до миллиарда) но снизилось не сильно, все так же лимит по памяти.
    тест
    При вводе:
    3
    2 2
    3 3
    9 9
    1
    1 1
    Вывод должен быть
    4
    2 2
    2 3
    1 4
    9 0

    #include <iostream>
    #include <vector>
    #include <cmath>
    #include <map>
    #include <sstream>
    
    using namespace std;
    
    struct vv{
        int c, num;
    };
    
    void printBigNumber(const std::vector<int>& number) {
    
        std::stringstream ss;
        for(int i = 0; i < number.size(); ++i)
        {
            if(i != 0)
                ss << "";
            ss << number[i];
        }
        std::string s = ss.str();
        vector<int>num;
        //cout << 's' << endl;
        for(auto k : s)
            num.push_back(int(k) - 48);
        s.clear();
        s.shrink_to_fit();
        int cnt = 0;
        std::vector<vv> kk;
        for (int k = 0; k < num.size(); ++k) {
            if (k + 1 < num.size()) {
                if (num[k] == num[k + 1]) {
                    cnt++;
                } else {
                    kk.push_back({cnt + 1, num[k]});
                    cnt = 0;
                }
            } else {
                kk.push_back({cnt + 1, num[k]});
            }
        }
        std::cout << kk.size() << std::endl;
        for (auto j: kk) {
            std::cout << j.c << ' ' << j.num << '\n';
        }
    }
    
    int main() {
        vector<int> a;
        vector<int> b;
        const int base = 1000 * 1000 * 1000;
        int n;
        string stra;
        string strb;
        cin >> n;
        while (n--) {
            int c;
            char num;
            cin >> c >> num;
            while (c--) {
                stra.push_back(num);
            }
        }
        cin >> n;
        while (n--) {
            int c;
            char num;
            cin >> c >> num;
            while (c--) {
                strb.push_back(num);
            }
        }
        for (int i = (int) stra.length(); i > 0; i -= 9) {
            if (i < 9)
                a.push_back(atoi(stra.substr(0, i).c_str()));
            else
                a.push_back(atoi(stra.substr(i - 9, 9).c_str()));
        }
    
    
        for (int i = (int) strb.length(); i > 0; i -= 9){
            if (i < 9)
                b.push_back(atoi(strb.substr(0, i).c_str()));
            else
                b.push_back(atoi(strb.substr(i - 9, 9).c_str()));
        }
    
        while (a.size() > 1 && a.back() == 0)
            a.pop_back();
    
        while (b.size() > 1 && b.back() == 0)
            b.pop_back();
    
    
        int carry = 0;
        for (size_t i=0; i<max(a.size(),b.size()) || carry; ++i) {
            if (i == a.size())
                a.push_back (0);
            a[i] += carry + (i < b.size() ? b[i] : 0);
            carry = a[i] >= base;
            if (carry)  a[i] -= base;
        }
        b.clear();
        b.shrink_to_fit();
        std::vector<int>res;
        res.push_back(a.empty() ? 0 : a.back());
    
        for (int i=a.size()-2;i>=0;i--) {
            int len2=9;
            if (!a[i])
                while(--len2) res.push_back(0);
            else
                while (a[i]<pow(10.0,--len2)) res.push_back(0);
            res.push_back(a[i]);
        }
        a.clear();
        a.shrink_to_fit();
        printBigNumber(res);
    }
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    struct vv{
        int c, num;
    };
    
    void printBigNumber(const std::vector<int>& number, int len) {
        int cnt = 0;
        std::vector<vv> kk;
        for (int k = 0; k < len; ++k) {
            if (k + 1 < len) {
                if (number[k] == number[k + 1]) {
                    cnt++;
                } else {
                    kk.push_back({cnt + 1, number[k]});
                    cnt = 0;
                }
            } else {
                kk.push_back({cnt + 1, number[k]});
            }
        }
        std::cout << kk.size() << std::endl;
        for (auto j: kk) {
            std::cout << j.c << ' ' << j.num << '\n';
        }
    //    for(auto k : number){
    //        std::cout << k << ' ';
    //    }
    }
    
    int main() {
        vector<int> a;
        vector<int> b;
        const int base = 1000 * 1000 * 1000;
        int n;
        cin >> n;
        while (n--) {
            int c;
            int num;
            cin >> c >> num;
            while (c--) {
                a.push_back(num);
            }
        }
        cin >> n;
        while (n--) {
            int c;
            int num;
            cin >> c >> num;
            while (c--) {
                b.push_back(num);
            }
        }
    //    for(auto k : a){
    //        std::cout << k;
    //    }
    //    cout << '+';
    //    for(auto k : b){
    //        std::cout << k;
    //    }
    //    cout << endl;
        int size_a = a.size();
        int size_b = b.size();
        int length;
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());
        if (size_a > size_b) {
            length = size_a + 1;
            b.resize(length);
        }
        else
            length = size_b + 1;
            a.resize(length);
    
        for (int ix = 0; ix < length; ix++)
        {
            b[ix] += a[ix];
            b[ix + 1] += (b[ix] / 10);
            b[ix] %= 10;
        }
    
        if (b[length - 1] == 0){
            length--;
            b.erase(b.end() - 1);
        }
        reverse(b.begin(), b.end());
        printBigNumber(b, length);
    }

    Переписал для чисел разных размеров(второе может быть больше), такая же ошибка, на том же тесте. Есть предположение что тут нужен другой алгоритм, нашел какой то на емаксе, но не понял пока как его перенести к такому выводу, который мне нужен.
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    вектор и пар нужен только для того чтобы посчитать кол-во цепочек, насчет второго числа большего чем первое я посмотрю и попробую исправить Но вроде как первое всегда будет больше второго. исправить я так понимаю это можно только добавлением нулей в начало до нужного размера.
    Написано
  • Как проверить многоугольник на закольцованность?

    @impelix Автор вопроса
    Ну имеется ввиду что наличии некоторого кол-ва прямых известных размеров, как проверить можно ли составить из них многоугольник.
    Написано
  • Как проверить многоугольник на закольцованность?

    @impelix Автор вопроса
    Ну имеется ввиду что наличии некоторого кол-ва прямых известных размеров, как проверить можно ли составить из них многоугольник.
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    mayton2019, она идет по числу и считает кол-во цепочек из одинаковых цифр подряд, после того как такая цепочка найдена, она заносит в этот вектор(kk) данные в формате кол-ва цифр в цепочки и самой цифры, После того как прошлись она выводит число таких цепочек и потом само число в заданном формате. Таком же как формат ввода.
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    mayton2019, а как считать количество цепочек повторяющихся?
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    mayton2019, сам код то рабочий, просто интересно что здесь еще можно оптимизировать чтобы снизить затраты памяти.
    Написано
  • Что можно убрать чтобы оптимизировать затраты памяти?

    @impelix Автор вопроса
    mayton2019, ну вообще это просто контест, с различными задачами среди которых встретилась подобная. числа подаются в таком формате, у меня же они хранятся в векторе где каждый индекс это цифра. Для более простой арифметики. А 2 2 1 1 1 - это формат входных данных, всего навсего.
    Написано
  • В чем разница 2ух кодов?

    @impelix Автор вопроса
    Dmitrii, неправильный ответ на 1 тест, хотя согласно тому что предоставлено, он вполне правильный
    Написано
  • Как сконвертировать проект в пайчарм в exe файл?

    @impelix Автор вопроса
    ну работал с bat файлами никогда, попробую