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

Добыча радия

12.01.2021, 21:31. Показов 1250. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для геологической разведки перед добычей радия на плато Меридиана на орбиту Марса выведен специальный спутник, позволяющий измерять уровень радиоактивности на поверхности.

Представим плато как прямоугольник, состоящий из n×m единичных квадратов, обозначим j -й квадрат в i -м ряду как (i,j).

В результате сканирования плато для каждого единичного квадрата был определён уровень радиоактивности. Уровень радиоактивности квадрата (i,j) задаётся целым положительным числом aij. Точность измерений настолько велика, что все числа aij различны. Единичный квадрат (i,j) считается подходящим для добычи радия, если значение aij является максимальным в i -й строке, а также максимальным в j -м столбце.

В процессе наблюдений было проведено q последовательных уточнений уровня радиоактивности. А именно, k -е уточнение изменяло значение arkck на некоторое \textbf{строго большее} значение. При этом после каждого уточнения все значения aij оставались различными.

Требуется написать программу, которая по заданным исходным значениям aij и списку уточнений после каждого уточнения информации определяет количество подходящих для добычи радия единичных квадратов.
Входные данные
Первая строка входных данных содержит три положительных целых числа: n, m и q (1≤n×m≤200000, 1≤q≤200000). Обратите внимание, что ограничение сверху дано на площадь плато, а не на количество столбцов и строк по отдельности.

Следующие n строк содержат по m положительных целых чисел, j -е число в i -й из этих строк задаёт начальное значение aij (1≤aij≤107, все aij различны).

Следующие q строк описывают уточнения данных, k -я из них содержит три целых числа rk, ck и xk и задаёт изменение информации об уровне радиоактивности единичного квадрата (rk,ck), новое значение равно xk (1≤rk≤n, 1≤ck≤m, 1≤xk≤107). Гарантируется, что xk строго больше предыдущего уровня радиоактивности в этом квадрате, и что все уровни радиоактивности различны после каждого изменения.
Выходные данные
Выходные данные должны содержать q строк, в k -й из этих строк требуется вывести одно число - количество подходящих для добычи радия единичных квадратов после k -го обновления информации.

Примеры:
C++
1
2
3
4
5
6
2 3 3
1 4 3
6 5 2
2 2 9
1 3 5
2 2 10
C++
1
2
3
1
2
2
Добавлено через 13 минут
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
#pragma gcc optimize("Ofast,no-stack-protector,tune=native")
#pragma gcc optimize("sse,sse2,sse3,sse4,ssse3")
#pragma gcc optimize("O3")
#pragma gcc optimize("abm,mmx,avx,avx2,unroll-loops,fast-math,section-anchors")
 
#include <bits/stdc++.h>
 
using namespace std;
 
#define vec vector
#define all(x) x.begin(), x.end()
#define deq deque
 
typedef long long ll;
 
#define int long long
 
struct field {
    int val, i, j;
    field(int val = -1, int i = 0, int j = 0) : val(val), i(i), j(j) {}
    friend istream& operator>> (istream& in, field &Field) {
        in >> Field.i >> Field.j >> Field.val;
        return in;
    }
    friend ostream& operator<< (ostream& out, field &Field) {
        out << "{" << Field.val << " : " << Field.i << " : " << Field.j << "}";
        return out;
    }
};
 
bool operator> (field &first, field &second) {
    return first.val > second.val;
}
 
bool operator== (field &first, field &second) {
    return first.val == second.val && first.i == second.i && first.j == second.j;
}
 
signed main()
{
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2021, 21:31
Ответы с готовыми решениями:

База данных с++ "Добыча угля" (Отчет по практике)
Доброго времени суток! Люди помогите создать базу данных по добыче угля,производственная практика уже заканчивается а программы нет(незнаю...

Добыча золота в варкрафт
Заданное количество юнитов добывают золото равными порциями из одной шахты, задерживаясь в пути на случайное время, до ее истощения. ...

Распад радия
Уважаемые, как найти число распадов за 1 секунду в 1 грамме радия (226,88). Заранее благодарю!

4
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
13.01.2021, 11:16
Накидал код, но часть тестов на informatics.msk.ru не проходит по времени. Что странно, т.к. на моих самодельных тестах максимум времени ~0.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
#include <iostream>
#include <vector>
 
int main()
{
    int n, m, q;
    std::cin >> n >> m >> q;
 
    std::vector<std::pair<int, int>> r(n), c(m);
 
    for (int i{}, k; i < n; ++i)
        for (int j{}; j < m; ++j) {
            std::cin >> k;
            if (!j || r[i].first < k) r[i].first = k, r[i].second = j;
            if (!i || c[j].first < k) c[j].first = k, c[j].second = i;
        }
 
    int cnt{};
    for (int i{}; i < n; ++i)
        if (r[i].first == c[r[i].second].first) ++cnt;
 
    for (int i{}, rk, ck, xk; i < q; ++i) {
        std::cin >> rk >> ck >> xk;
        --rk, --ck;
        if (r[rk].first < xk) {
            if (r[rk].first == c[r[rk].second].first) --cnt;
            r[rk].first = xk, r[rk].second = ck;
        }
        if (c[ck].first < xk) {
            if (c[ck].first == r[c[ck].second].first) --cnt;
            c[ck].first = xk, c[ck].second = rk;
        }
        std::cout << (cnt += r[rk].first == c[ck].first) << '\n';
    }
 
    return 0;
}
0
1 / 1 / 0
Регистрация: 21.05.2020
Сообщений: 11
14.01.2021, 12:02  [ТС]
Самодельные тесты - стресс-тест или вы просто вписывали сами?

Добавлено через 1 час 28 минут
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
#pragma gcc optimize("Ofast,no-stack-protector,tune=native")
#pragma gcc optimize("sse,sse2,sse3,sse4,ssse3")
#pragma gcc optimize("O3")
#pragma gcc optimize("abm,mmx,avx,avx2,unroll-loops,fast-math,section-anchors")
 
#include <bits/stdc++.h>
 
using namespace std;
 
#define vec vector
#define all(x) x.begin(), x.end()
#define deq deque
 
typedef long long ll;
 
#define int long long
 
struct field {
    int val, i, j;
    field(int val = -1, int i = 0, int j = 0) : val(val), i(i), j(j) {}
    friend istream& operator>> (istream& in, field &Field) {
        in >> Field.i >> Field.j >> Field.val;
        return in;
    }
    friend ostream& operator<< (ostream& out, field &Field) {
        out << "{" << Field.val << " : " << Field.i << " : " << Field.j << "}";
        return out;
    }
};
 
bool operator> (field &first, field &second) {
    return first.val > second.val;
}
 
bool operator== (field &first, field &second) {
    return first.val == second.val && first.i == second.i && first.j == second.j;
}
 
signed main()
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);
    int n, m, q; cin >> n >> m >> q;
    vec<field> a(n), b(m);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int tmp; cin >> tmp;
            if (tmp > a[i].val) a[i] = field(tmp, i, j);
            if (tmp > b[j].val) b[j] = field(tmp, i, j);
        }
    }
    vec<field> v(q);
    for (auto& it : v) cin >> it;
    int ans = 0;
    for (auto& jt : a) if (b[jt.j] == jt) ans++;
    // cout << ans << endl;
    for (auto& it : v) {
        it.j--;
        it.i--;
        // cout << it;
        int tmp = 0;
        if (b[a[it.i].j] == a[it.i] && it > a[it.i]) tmp--;
        if (a[b[it.j].i] == b[it.j] && it > b[it.j]) tmp--;
        if (a[it.i] ==  b[it.j]) tmp++;
        if (it > a[it.i]) a[it.i] = it;
        if (it > b[it.j]) b[it.j] = it;
        if (b[it.j] == a[it.i]) tmp++;
        // if (a[b[it.j].i] == b[it.j]) tmp++;
        ans += tmp;
        cout << ans << endl;
    }
}
Рабочий код, зашел на 100 баллов
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
14.01.2021, 19:40
Проблема времени выполнения решалась отвязкой cin от cout.
Цитата Сообщение от Santa_Mike Посмотреть сообщение
cin.tie(0);
Ваш код конечно работает, но выглядит печально. На моём тесте (который ясно дело грузит на максимум, иначе какой смысл) ваш код показал >1.3сек, где у меня <0.5сек.
В итоге:
Миниатюры
Добыча радия  
0
1 / 1 / 0
Регистрация: 21.05.2020
Сообщений: 11
01.07.2021, 10:21  [ТС]
Конечно, медленнее. Я использовал структуры. Тем не менее, асимптотически мой код быстрее, т.е. у тебя в начале быстрее а потом очень сильно замедляется, а у меня в начале медленнее но прирост времени меньше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2021, 10:21
Помогаю со студенческими работами здесь

Найдите период полураспада радия
Спасибо за помощь. Конечно есть вопросы, но они не конкретные, поэтому задавать их не имеет смысла. Это надо самому понять. 575. ...

Распад радия совершается по закону, как решать
Распад радия совершается по закону R={R}_{0}\ast {e}^{-kt}, где {R}_{0} - количество радия в начальный момент времени t=0, a R - количество...

Найти, какой процент радия окажется распавшимся
Скорость распада радия пропорциональна наличному количеству его. Известно, что по истечении 1600 лет остается половина первоначального...

Добыча из URL
У меня url такого вида http://saitotot.com/page.php/id1. Как мне добыть цифру 1 или которая там . Вот такое не выходит if...

Добыча ресурсов в RTS
Добрых времени суток. Вопрос до жути глупый, но я видимо заработался и мозги совсем не варят, а код сдавать завтра утром :D В общем,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru