Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 18.06.2020
Сообщений: 17

Спутник

18.06.2020, 15:55. Показов 3832. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить эту задачу(можно на любом языке программирования)

Условие:
Секретная корпорация, занимающаяся поиском инопланетных жизненных форм обнаружила на одной из планет созвездия Альфа удивительные живые организмы (даже не плоские, а одномерные). Она приняла решение вести наблюдение за развитием и изменением численности организмов, с этой целью на орбиту планеты был послан спутник — наблюдатель, который мог следить за изменениями численности организмов. Недостаток этого «наблюдателя» в том, что он может отслеживать изменения только на той территории планеты, которая находиться непосредственно под ним.
С этой целью его траектория была разбита на равные интервалы. Они пронумерованы от 1 до N. По запросу с Земли о количестве живых форм в интервале с L по R (L <= R) — спутник должен, пролетая над ними (интервалами L, L + 1, ..., R - 1, R) произвести подсчет и затем, в ответ на запрос, отправить полученные данные. Но количество организмов постоянно изменяется: в некоторое время в X интервале на Y единиц.
Помогите написать программу для спутника, которая будет отвечать на запросы и отслеживать количество единиц жизни в каждом интервале.

Формат входных данных:
Во входном файле первым записано число N (1 <= N <= 2^13 = 8192). Затем записана последовательность событий:

«1 X Y» — изменение количества организмов в интервале с номером X на Y единиц;
«2 L R» — запрос суммарного количества организмов L-го по R-й интервал;
«0» – завершение работы программы.
Количество событий не превосходит 100000. Y <= 2^15=32768.

Формат выходных данных:
В выходной файл записывать только ответы на запросы.

входные данные:
2
1 1 4
2 1 1
2 1 1
0

выходные данные:
4
4

входные данные:
4
2 1 4
1 1 3
1 4 2
2 2 4
2 1 2
1 4 -2
1 2 8
2 1 4
0

выходные данные:
0
2
3
11
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2020, 15:55
Ответы с готовыми решениями:

Курсовая работа по графики Спутник земли
Курсовая работа на паскале &quot;Спутник земли &quot; Люди помогите ,пожалуйста, перевести эту программу с Pascal на с++ буду очень благодарна...

Изобразить планету вокруг которой движется спутник
помогите написать программу:изобразить планету вокруг которой движется спутник.:cry:

Может ли естественный спутник планеты иметь собственный спутник?
Может ли естественный спутник планеты иметь собственный спутник?

9
 Аватар для Recrut_rf
388 / 334 / 65
Регистрация: 14.10.2014
Сообщений: 1,463
18.06.2020, 21:29
иВаН0301, могу помочь с кодом, но в математике данного проекта разбираться желания нет вовсе. Различные интервалы, одно больше/меньше, либо равно другому, изменяемые значения - слишком сложно, муторно и велик риск ошибиться... Тут уж извольте сами...
0
 Аватар для Annemesski
2675 / 1336 / 481
Регистрация: 08.11.2016
Сообщений: 3,700
19.06.2020, 10:44
alexu_007, примитивнейшая задача:
1. читаем первую строку входного файла - там число интервалов - выделяем память под массив
2. обнуляем массив
3. читаем последовательно следующие строки входного файла пока не встретим ноль
4. если не ноль - значит три числа:
а) если первое в троице 1 то по индексу из второго числа накапливаем сумму с третьим
б) иначе - первое число в троице 2 - записываем в выходной файл сумму элементов массива от второго числа в троице до третьего
5 ...
PROFIT
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
19.06.2020, 11:52
Лучший ответ Сообщение было отмечено иВаН0301 как решение

Решение

Цитата Сообщение от Annemesski Посмотреть сообщение
примитивнейшая задача:
1. читаем первую строку входного файла - там число интервалов - выделяем память под массив
2. обнуляем массив
3. читаем последовательно следующие строки входного файла пока не встретим ноль
4. если не ноль - значит три числа:
а) если первое в троице 1 то по индексу из второго числа накапливаем сумму с третьим
б) иначе - первое число в троице 2 - записываем в выходной файл сумму элементов массива от второго числа в троице до третьего
5 ...
.....И это не будет работать по времени в виду пункта а)...


Решение через дерево отрезков :
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
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
struct segment_tree {
 
    vector<int>tree;
    int m = 1;
 
    segment_tree(int n){
        
        while(m < n)m *= 2;
        tree.resize(2*m-1);
    }
    
    void update(int i,int val,int v,int lx,int rx){
        
        if(rx - lx  == 1){
            tree[v] += val;
            return;
        }
        
        int mid = (lx+rx)/2;
        
        if(i < mid)update(i,val,v*2+1,lx,mid);
        else update(i,val,v*2+2,mid,rx);
        
        tree[v] = (tree[v*2+1]+tree[v*2+2]);                  
        
    }
    
    void update(int i,int val){
        update(i,val,0,0,m);
    }
    
    
    int op(int l,int r,int v,int lx,int rx){
        
        if(l >= rx || lx >= r)return 0;                      
        if(lx >= l && rx <= r)return tree[v];
        
        int mid = (lx+rx)/2;
        
        return ( op(l,r,v*2+1,lx,mid)+op(l,r,v*2+2,mid,rx) );      
        
    }
    
    int op(int l,int r){
        return op(l,r,0,0,m);
    }
    
    
    
};
 
int main() 
{
    int n;
    cin >> n;
    
    segment_tree t(n);
    
    while(1){
        
        int op,f,s;
        
        cin >> op;
        
        if(!op)return 0;
        
        cin >> f >> s;
        
        if(op == 1){
            t.update(f-1,s);
        } else cout << t.op(f-1,s) << "\n";
        
    }
    
    
    
    return 0;
}
Все тесты с сайта проходит.
1
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
19.06.2020, 12:08
Цитата Сообщение от Recrut_rf Посмотреть сообщение
а что за сайт?
Автор не удосужился прикрепить ссылку на систему проверки, но задачу, он полагаю, брал отсюда :
https://informatics.mccme.ru/m... rid=1672#1

Добавлено через 2 минуты
Цитата Сообщение от иВаН0301 Посмотреть сообщение
ну видите нашелся адекватный человек. как я и говорил. не прошло и суток.
LegionK, спасибо
Да пожалуйста. Только я бы вам все же посоветовал открыть статью на e maxx про структуры решающие эту задачу.
Так же дерево отрезков хорошо объясняет мужик с codeforces в разделе edu, (курс алгоритмов от итмо, который). Там же есть и практика.
0
0 / 0 / 0
Регистрация: 18.06.2020
Сообщений: 17
19.06.2020, 12:09  [ТС]
нет. это не этот сайт
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
19.06.2020, 12:14
иВаН0301, задача та же. тесты, полагаю, те же. Не вижу проблем
Про структуры данных я все же вас настойчиво прошу прочитать, ввиду того, что без них на олимпиадах делать нечего. (Сам в этом году собираюсь писать, т.к через год уже в вуз).
Именно эту задачу можно решать вот этим :
Дерево Отрезков, Дерево Фенвика, Декартово Дерево, Разреженная таблица.
Вот про них и читайте.
0
 Аватар для Annemesski
2675 / 1336 / 481
Регистрация: 08.11.2016
Сообщений: 3,700
19.06.2020, 13:47
LegionK, может я и не догнал, но тогда будьте любезны объясните какой тест не пройдет этот код?
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
#include <iostream>
#include<vector>
 
using namespace std;
 
int main() {
int n;
cin >> n;
int *q = new int[n];
for (int i = 0; i < n; ++i)
    q[i] = 0;
vector<int> out;
while (true)
{
    cin >> n;
    int l, r;
    if(!n) break;
    if(n == 1)
    {
        cin >> l >> r;
        q[l - 1] += r;
    }
    else
    {
        cin >> l >> r;
        int tmp = 0;
        for (int i = l - 1; i <= r -1; ++i)
            tmp += q[i];
        out.push_back(tmp);
    }
}
for (int i = 0; i < out.size(); ++i)
    cout << out[i] << endl;
cout <<"offline"<<endl;
return 0;
}
без файлов, ввод из stdin вывод в stdout из вектора
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
19.06.2020, 14:46
Annemesski, Хорошо.
Смотрите, формат вывода у вас немного не тот, после каждого запроса надо выводить ответ, если я правильно понимаю, а не все кучей. Хотя, может я не прав. Строка 34 туда же, ее убрать следует.
Теперь по решению.

Добавлено через 4 минуты
Есть понятие такое, big O notation, ваш алгоритм имеет сложность О(nm) - где n - количество элементов, m количество запросов.
Эта сложность у вас будет, если m запросов будут требовать сумму на отрезке 1...n.
При данных автором ограничениях это не войдет в секунду на стандартном компьютере, и решение не пройдет по времени.
В то же время эффективные решения задачи rsq с изменением элемента работают за О(m log n) , (например, код выше) и данную задачу решат.
Вот так.
0
 Аватар для Annemesski
2675 / 1336 / 481
Регистрация: 08.11.2016
Сообщений: 3,700
19.06.2020, 15:02
LegionK, 34 это я для себя оставил, по заданию вывод в файл, у меня вместо файла вектор - это не существенно. Ок, теперь понятно, есть ограничение по времени, спецом перечитал старт пост, там нет ограничения по времени, может в спортивном программировании это само собой разумеется, но тут в основном любители и профессионалы - сиречь: такие вещи надо уточнять.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2020, 15:02
Помогаю со студенческими работами здесь

Ио - огненный спутник Юпитера?
Ио - входит в четверку так называемых &quot;Галлилеевых&quot; спутников Юпитера. По своим размерам его можно сравнить с Луной (пожалуй он даже...

Задача про спутник
Уважаемые пользователи, натолкните, пожалуйста, на мысль по решению данной задачи: Спутник движется по орбите со скоростью 7,75 км/с....

Спутник на геосинхронной орбите
Спутник на геостационарной орбите для земного наблюдателя неподвижно висит в небе. А спутник на геосинхронной орбите с ненулевым...

Вирус - мэил ру спутник и реклама
Выскакивают ссылки в гугле хроме, встраивается реклама в код сайта

На компьютере установился спутник mail
Здравствуйте. На компьютере установился спутник mail, после чего стала появляться различная реклама в браузере, в т.ч. посторонний сайт при...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru