Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59

Жадная последовательность

07.06.2019, 21:00. Показов 3244. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть задача, над решением которой бьюсь несколько дней, но никак не могу дойти до правильного решения. Полный текст задания можно посмотреть на сайте, если вкратце, то смысл такой:
Дана последовательность из N целых чисел ai. Над последовательностью M раз выполняется следующая операция. Из последовательности удаляются два наименьших числа и добавляется в конец число равное сумме двух удаленных. Если наименьших чисел более двух, следует выбрать числа с наименьшими номерами в последовательности.
Требуется написать программу, выводящую последовательность, которая получится после выполнения M операций.
Программа тестируется на сайте, вот самый успешный на данный момент вариант кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    if (!fin.is_open())
    {
        cout << "open file error" << endl;
        return -1;
    }
 
    int n, m;
    fin >> n;
    fin >> m;
 
    int *a = new int [n];
    for (int i = 0; i < n; ++i) {
        fin >> a[i];
    }
    fin.close();
 
    // часть для тестирования
    //delete[] a;
    //n = m = 100000;
    //a = new int [n];
    //for (int i = 0; i < n; ++i)
    //  a[i] = rand() % 20001 - 10000;
 
    int mi = 0;
    int j1, j2, a1, a2, a3;
 
    while (n > 1 && mi < m) 
    {
        if (a[0] < a[1])
        {
            j1 = 0; a1 = a[j1];
            j2 = 1; a2 = a[j2];
        }
        else
        {
            j1 = 1; a1 = a[j1];
            j2 = 0; a2 = a[j2];
        }
 
        for (int j = 2, *aj = &a[2]; j < n; j ++, aj ++) 
        {
            if (*aj < a2)
            {
                if (*aj < a1)
                {
                    a2 =  a1; j2 = j1;
                    a1 = *aj; j1 = j;
                }
                else
                {
                    a2 = *aj; j2 = j;
                }
            }
        }
 
        if (j1 > j2) {
            a3 = j1;
            j1 = j2;
            j2 = a3;
        }
 
        if (j1 < j2 - 1)
            memmove(&a[j1], &a[j1 + 1], (j2 - j1 - 1) * sizeof(int));
        
        if (j2 < n - 1)
            memmove(&a[j2 - 1], &a[j2 + 1], (n - j2 - 1) * sizeof(int));
 
        //for (int j = j1; j < j2 - 1; j ++)
        //  a[j] = a[j + 1];
 
        //for (int j = j2 - 1; j < n - 2; j ++)
        //  a[j] = a[j + 2];
 
        a[n - 2] = a1 + a2;
        n --;
        mi ++;
    }
 
    ofstream fout("output.txt");
    if (!fout.is_open())
    {
        cout << "open file error" << endl;
        return -2;
    }
 
    for (int i = 0; i < n; ++i) {
        fout << a[i] << " ";
    }
    fout.flush();
    fout.close();
 
    delete[] a;
    return 0;
}
но проблема в том, что этот код не проходит тесты по времени, а ограничения по переменным достаточно большие:
1 ≤ M < N ≤ 105, −104ai ≤ 104.
Преподаватель говорит, что нужно использовать структуру "куча". Я попытался написать ещё одну версию, но она работает ещё медленнее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <fstream>
 
#include <functional>
#include <queue>
#include <cstdint>
 
using namespace std;
 
struct Elem
{
    int64_t value;
    int index;
 
    Elem (int64_t v, int i)
    {
        value = v;
        index = i;
    }
};
 
struct comp_val
{
    bool operator()(const Elem& a, const Elem& b)
    {
        if (a.value == b.value)
            return (a.index > b.index);
        else
            return (a.value > b.value);
    }
};
 
struct comp_index
{
    bool operator()(const Elem& a, const Elem& b)
    {
        return (a.index > b.index);
    }
};
 
int main()
{
    priority_queue<Elem, vector<Elem>, comp_val> q;
 
    ifstream fin("input.txt");
    if (!fin.is_open())
    {
        cout << "open file error" << endl;
        return -1;
    }
 
    int n, m, val;
    fin >> n;
    fin >> m;
 
    for (int i = 0; i < n; ++i) {
        fin >> val;
        q.push(Elem(val, i));
    }
    fin.close();
 
    // n = m = 100000;//00;
    // for (int i = 0; i < n; ++i)
    // {
        // val = rand() % 20001 - 10000;
        // q.push(Elem(val, i));
    // }
 
    int sum;
    for (int mi = 0; mi < m && q.size() > 2; mi ++)
    {
        //cout << "Step " << mi + 1 << endl;
        //cout << "removed a[" << q.top().index << "] = " << q.top().value << endl;
        sum = q.top().value;
        q.pop();
 
        //cout << "removed a[" << q.top().index << "] = " << q.top().value << endl;
        sum += q.top().value;
        q.pop();
        
        //cout << "appended a[" << n << "] = " << sum << endl;
        q.push(Elem(sum, n ++));
    }
    
    priority_queue<Elem, vector<Elem>, comp_index> q_out;
 
    // сортировка по индексу
    while (!q.empty()) {
        q_out.push(q.top());
        q.pop();
    }
 
    ofstream fout("output.txt");
    if (!fout.is_open())
    {
        cout << "open file error" << endl;
        return -2;
    }
 
    while (!q_out.empty()) {
        fout << q_out.top().value << " ";
        //fout << a[i] << " ";
        q_out.pop();
    }
    fout.flush();
    fout.close();
 
    return 0;
}
Подскажите, что я делаю не так, может быть нужно писать свою реализацию кучи или что-то ещё, я в отчаянии
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2019, 21:00
Ответы с готовыми решениями:

Жадная триангуляция в трехмерном пространстве
Решил я на днях обуздать триангуляцию (разбиение плоскости на множество треугольников) , пишу программу, нарисовал оси, точки ( рандомные...

Дана последовательность целых чисел. Получить новую последовательность.
Помогите решить задачу! Дана последовательность целых чисел a1, a2, …, an (n&lt;=40). Получить новую последовательность, выбросив из...

Задана последовательность слов. Определить частоту вхождения каждого слова в последовательность.
Доделать программу, чтобы работала как надо Задана последовательность слов. Определить частоту вхождения каждого слова в...

23
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 21:34
Лучший ответ Сообщение было отмечено Hirurg2605 как решение

Решение

Цитата Сообщение от Hirurg2605 Посмотреть сообщение
Подскажите, что я делаю не так, может быть нужно писать свою реализацию кучи или что-то ещё, я в отчаянии
Думаю, здесь лучше использовать std::vector<int> q;
Сначала запрашиваешь кол-во элементов fin >> n;
Потом делаешь q.reserve(n);
Потом
C++
1
2
3
4
    for (int i = 0; i < n; ++i) {
        fin >> val;
        q.emplace_back(val);
    }
Добавлено через 40 секунд
Потом std::sort(q.begin(), q.end());

Добавлено через 1 минуту
Нет, здесь лучше использовать обратную сортировку, чтоб удалять не из головы, а из хвоста

Добавлено через 56 секунд
Находишь сумму двух последних элементов и удаляешь их

Добавлено через 1 минуту
Затем находишь с помощью std::binary_search место, куда эту сумму вставить
Вставляешь её

Добавлено через 42 секунды
Снова ищешь сумму двух последних и так M раз

Добавлено через 4 минуты
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Потом std::sort(q.begin(), q.end());
Добавлено через 1 минуту
Нет, здесь лучше использовать обратную сортировку, чтоб удалять не из головы, а из хвоста
std::sort(q.begin(), q.end(), std::greater<int>)
1
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
07.06.2019, 22:00  [ТС]
Спасибо за ответ! Допустим всё так: отсортировали, извлекли два минимальных, добавили их сумму и так M раз, но как потом сформировать результат после M шагов, хранить структуру так же, как в моём варианте с кучей и сортировать по полю со значениями индекса перед выводом?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 22:08
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
Спасибо за ответ! Допустим всё так: отсортировали, извлекли два минимальных, добавили их сумму и так M раз, но как потом сформировать результат после M шагов, хранить структуру так же, как в моём варианте с кучей и сортировать по полю со значениями индекса перед выводом?
Там нужны эти индексы?
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
07.06.2019, 22:14  [ТС]
и второй вопрос, как всё-таки быть, добавлять элемент каждый раз элемент в хвост и сортировать, или как-то использовать std::binary_search? не очень понимаю как, т.к. эта функция только true/false возвращает без позиции

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Там нужны эти индексы?
в условии задачи сказано:
Из последовательности удаляются два наименьших числа и добавляется в конец число равное сумме двух удаленных. Если наименьших чисел более двух, следует выбрать числа с наименьшими номерами в последовательности.
т.е. порядок важен

Добавлено через 4 минуты
в первом варианте кода порядок элементов не нарушается, но приходится на каждой итерации искать минимальные элементы, а это затраты времени. в варианте с кучей последовательность по сути сразу однажды сортируется, но индексы мы не теряем, однако вот эта первоначальная сортировка всё портит, очень долго заполняется куча. ну и с выводом вопрос пришлось решать коряво, но ничего умнее не придумал
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 22:19
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
т.е. порядок важен
Так это о значениях, а не об индексах

Добавлено через 3 минуты
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
и второй вопрос, как всё-таки быть, добавлять элемент каждый раз элемент в хвост и сортировать, или как-то использовать std::binary_search? не очень понимаю как, т.к. эта функция только true/false возвращает без позиции
Нет, не сортировать. auto it = std::upper_bound , q.insert(it, val)
1
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
07.06.2019, 22:19  [ТС]
забыл прикрепить пример, может быть так будет понятнее
Миниатюры
Жадная последовательность  
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
07.06.2019, 22:23  [ТС]
первые два числа это N и M, а далее сама последовательность из N элементов

Добавлено через 2 минуты
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
auto it = std::upper_bound , q.insert(it, val)
так понятнее, спасибо
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Так это о значениях, а не об индексах
мне кажется это противоречит примерам
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 22:30
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
мне кажется это противоречит примерам
Ну сделай, std::vector<std:ait<int, size_t>>, это вообще ничего не изменит

Добавлено через 1 минуту
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
первые два числа это N и M, а далее сама последовательность из N элементов
Проверь поточнее
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
07.06.2019, 23:08  [ТС]
Попробую завтра на свежую голову сделать по вашему предложению с сортировкой и вставкой. Только может быть лучше std::list использовать? там вставка в середину должна быстрее работать, если я ничего не путаю
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 23:19
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
Попробую завтра на свежую голову сделать по вашему предложению с сортировкой и вставкой. Только может быть лучше std::list использовать? там вставка в середину должна быстрее работать, если я ничего не путаю
Там на поиске этой середины просрёшь
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.06.2019, 11:46
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Сообщение от Hirurg2605
Попробую завтра на свежую голову сделать по вашему предложению с сортировкой и вставкой. Только может быть лучше std::list использовать? там вставка в середину должна быстрее работать, если я ничего не путаю
Там на поиске этой середины просрёшь
Хотя, нет. Идея вполне разумная. Единственно, там первая сортировка будет медленнее, но это могут компенсировать последующие вставки/удаления. В общем, рекомендую попробовать оба способа, они почти одинаковые

Добавлено через 50 минут
Кстати, подумал - эта сумма двух удалённых должна потом участвовать в поиске минимальных элементов? (из первого примера не смог понять, но, похоже, не должна)
Если нет, то лучше использовать массив, там вообще операции удаления/вставки в середину не понадобятся.

Судя по картинке, похоже - так и нужно
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
08.06.2019, 11:52  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
сумма двух удалённых должна потом участвовать в поиске минимальных элементов?
должна конечно, во втором примере это как раз видно, например:
0) 3 2 1 1
1) 3 2 2
1) 3 4
Вывод:
3 4

Добавлено через 1 минуту
кстати, вариант с вектором я уже сделал. ещё не всё проверил, но ускорение есть! 4 секунды против 20 в моём предыдущем лучшем варианте, это при N = 105
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.06.2019, 12:07
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
кстати, вариант с вектором я уже сделал. ещё не всё проверил, но ускорение есть! 4 секунды против 20 в моём предыдущем лучшем варианте, это при N = 105
Многовато, покажи код.
Проверь вариант со списком и ещё с std::multiset

Добавлено через 2 минуты
Кстати, а какие там ограничения по времени?
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
08.06.2019, 12:10  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
покажи код.
если опустить загрузку параметров, то как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
int test_vec(int n, int m, int *a)
{
    vector<Elem> vec;
    vec.reserve(n);
 
    for (int i = 0; i < n; ++i)
        vec.emplace_back(Elem(a[i], i));
 
    sort(vec.begin(), vec.end(), fcomp_val);
 
    vector<Elem>::iterator it;
    Elem el;
    int64_t sum;
 
    for (int mi = 0; mi < m && vec.size() > 2; mi ++)
    {
        //cout << "Step " << mi + 1 << endl;
        //cout << "removed a[" << q.top().index << "] = " << q.top().value << endl;
        sum = vec.back().value;
        vec.pop_back();
 
        //cout << "removed a[" << q.top().index << "] = " << q.top().value << endl;
        sum += vec.back().value;
        vec.pop_back();
        
        //cout << "appended a[" << n << "] = " << sum << endl;
        el = Elem(sum, n ++);
        it = upper_bound(vec.begin(), vec.end(), el, fcomp_val);
        vec.insert(it, el);
    }
    
    // сортировка по индексу
    sort(vec.begin(), vec.end(), fcomp_index);
 
    ofstream fout("output.txt");
    if (!fout.is_open())
    {
        cout << "open file error" << endl;
        return -2;
    }
 
    it = vec.begin();
    while (it != vec.end())
    {
        fout << (*it).value << " ";
        it ++;
    }
 
    fout.flush();
    fout.close();
 
    return 0;
}
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Кстати, а какие там ограничения по времени?
вроде как секунда, но я в дебажной версии замеряю у себя, как там на сервере в тестах будет всё равно не узнаю пока не попробую
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.06.2019, 12:12
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
for (int i = 0; i < n; ++i)
* * * * vec.emplace_back(Elem(a[i], i));
Сходу - у тебя уже есть массив int *a, работай с ним, зачем тебе второй?
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
08.06.2019, 12:13  [ТС]
со списками как-то не задалось
Миниатюры
Жадная последовательность  
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
08.06.2019, 12:14  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
с ним, зачем тебе второй?
ну это для тестов пока, чтобы исходный не испортить и для сравнения его в другую функцию передать
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.06.2019, 12:29
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
со списками как-то не задалось
Самой собой - там надо совсем не так, как с массивом

Добавлено через 3 минуты
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
// сортировка по индексу
* * sort(vec.begin(), vec.end(), fcomp_index);
Думаю, это лишнее. И вообще эти индексы. Если ты создаёшь новые элементы, о каких индексах может идти речь? Посмотри на пример, который ты мне показал - там нет индексов

Добавлено через 4 минуты
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
it = vec.begin();
* * while (it != vec.end())
* * {
* * * * fout << (*it).value << " ";
* * * * it ++;
* * }
fout.flush();
* * fout.close();
C++
1
2
for (auto &item: vec)
   fout << (*it).value << " ";
fout.flush(); - не нужен
Это тоже учитывается по времени?

Добавлено через 1 минуту
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
el = Elem(sum, n ++);
А это что?

Добавлено через 4 минуты
Цитата Сообщение от Hirurg2605 Посмотреть сообщение
вроде как секунда, но я в дебажной версии замеряю у себя, как там на сервере в тестах будет всё равно не узнаю пока не попробую
Замеряй в релизной. В дебажной только дебаж.

Добавлено через 42 секунды
Никто не запускает в дебажных версиях
0
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 59
08.06.2019, 12:52  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Думаю, это лишнее. И вообще эти индексы. Если ты создаёшь новые элементы, о каких индексах может идти речь? Посмотри на пример, который ты мне показал - там нет индексов
нет, индексы не лишние, нам важен порядок элементов последовательности на каждом шаге. новым элементам я задаю такой индекс, как если бы мы на самом деле добавляли их в конец (n ++) и при прерывании основного цикла эти элементы в выходной последовательности оказываются правее, иначе результат некорректный

Добавлено через 57 секунд
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А это что?
это как раз создание нового элемента с индексом "правее" всех остальных и значением равным сумме удалённых

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Замеряй в релизной. В дебажной только дебаж.
я замеряю только для относительного сравнения разных версий, замерять максимальную скорость в абсолютно точных значениях не вижу смысла, т.к. время на сервере всё равно будет отличаться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2019, 12:52
Помогаю со студенческими работами здесь

Вставить в последовательность действительное число b так, чтобы последовательность осталась неубывающей
Дана последовательность действительных чисел a1 &lt;= a2&lt;= ... &lt;=an вставить действительное число b так чтобы последовательность осталась...

Построить последовательность из 0 и 1, в которой Bi=1 если элементы i-го столбца образуют убывающую последовательность
Дана действительная квадратная матрица порядка n. Построить последовательность В1,В2,...,Вп из нулей и единиц, в которой Bi=1 тогда,и...

Вводится последовательность из N вещественных чисел. Определить, является ли последовательность знакочередующе
Вводится последовательность из N вещественных чисел. Определить, является ли последовательность знакочередующейся. не пойму как сделать,...

Массив: Вставить в последовательность действительное число b так, чтобы последовательность осталась неубывающей.
дана последовательность действительных чисел. вставить в нее действительное число b так, чтобы последовательность осталась неубывающей. ...

Можно ли разрезать последовательность на две части и поменять их местами, чтобы последовательность стала симметричной?
Здрасте! Помогите пожалуйста с задачой из универа по с++ &quot;Можно ли разрезать последовательность на две части, и поменять их местами,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru