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

Добыча радия

12.01.2021, 21:31. Показов 1230. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru