Закиров Ильдан
Ученик
(178)
2 месяца назад
#include <iostream>
#include <vector>
using namespace std;
void setNewSeed(unsigned int& seed) {
seed *= 123456;
seed %= 987;
seed += 123;
seed %= 10000;
}
std::pair<char, unsigned int> getQuery(unsigned int& seed) {
char op = "im"[seed % 2];
setNewSeed(seed);
unsigned int number = seed;
setNewSeed(seed);
return { op, number };
}
std::vector<std::pair<char, unsigned int>>
getTaskQueries(unsigned int seed) {
unsigned int q = seed;
setNewSeed(seed);
std::vector<std::pair<char, unsigned int>> queries;
for (int i = 0; i < q; ++i) {
queries.push_back(getQuery(seed));
}
return queries;
}
int main() {
vector <pair<char, unsigned int>> mass;
vector <unsigned int> mnojestvo;
unsigned int seed;
cin >> seed;
unsigned int sum = 0;
mass = getTaskQueries(seed);
for (int i = 0; i < seed; i++) {
if (mass[i].first == 'i') {
mnojestvo.push_back(mass[i].second);
}
if (mass[i].first == 'm') {
bool flag = mnojestvo.empty();
if (flag) {
unsigned int null = 0;
sum += min(null,mass[i].second);
}
else {
unsigned int minn;
for (auto x : mnojestvo) {
minn=mnojestvo[0];
if (minn > x) {
minn = x;
}
}
sum += min(minn, mass[i].second);
}
}
}
cout << sum;
}
op number.
op это символ, он может быть либо `i`, либо `m`
number это неотрицательное целое число. number не превосходит 10000
Изначально у вас есть пустое множество чисел.
Если к вам приходит запрос `i` number, то вы должны добавить число number в ваше множество. Если к вам приходит запрос `m` number , вы должны найти минимум X среди всех чисел, которые уже присутствуют в вашем множестве и сравнить его с числом number. Ответом на такой запрос является min(X, number). При этом, если на момент такого запроса в вашем множестве еще нет ни одного элемента, то будем считать, что минимальный элемент в нем это 0.
В этой задаче, кол-во запросов, а также сами запросы генерирует ваша программа.
Для удобства, вам уже дан код генератора запросов
void setNewSeed(unsigned int& seed) {
seed *= 123456;
seed %= 987;
seed += 123;
seed %= 10000;
}
std::pair<char, unsigned int> getQuery(unsigned int& seed) {
char op = "im"[seed % 2];
setNewSeed(seed);
unsigned int number = seed;
setNewSeed(seed);
return {op, number};
}
std::vector<std::pair<char, unsigned int>>
getTaskQueries(unsigned int seed) {
unsigned int q = seed;
setNewSeed(seed);
std::vector<std::pair<char, unsigned int>> queries;
for (int i = 0; i < q; ++i) {
queries.push_back(getQuery(seed));
}
return queries;
}
Для того, чтобы получить запросы в этой задаче, вы должны вызвать функцию getTaskQueries и передать ей параметр seed. В ответ эта функция вернет вектор размера q. Элементы этого вектора — пары. Они и являются запросами к задаче. Первый элемент пары это символ (либо `i`, либо `m`). Второй элемент пары это число number. Вы можете просто скопировать код генератора в вашу программу и пользоваться им, чтобы получить запросы.
Формат входных данных
На вход вашей программе подается число seed < 10000. С его помощью ваша программа будет генерировать исходные запросы.
Формат выходных данных
Выведите одно число — сумму ответов на все запросы типа `m` number.
Пример
Если запросы имели вид
i 5
m 6
i 11
m 3
То ответ на задачу будет min(5, 6) + min(5, 3) = 8
В поле краткого ответа введите результат выполнения вашей программы для seed = 9997