0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 129

Посчитать, сколько дней каждый из городов мира был первым по общей сумме денег миллиардеров

10.11.2019, 19:21. Показов 1194. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите срочно перевести код в С#

Возможно, вы знаете, что из всех городов мира больше всего миллиардеров живёт в Москве. Но, поскольку работа миллиардера подразумевает частые перемещения по всему свету, в определённые дни какой-то другой город может занимать первую строчку в таком рейтинге. Ваши приятели из ФСБ, ФБР, MI5 и Шин Бет скинули вам списки перемещений всех миллиардеров за последнее время. Ваш работодатель просит посчитать, сколько дней в течение этого периода каждый из городов мира был первым по общей сумме денег миллиардеров, находящихся в нём.
Исходные данные
В первой строке записано число n — количество миллиардеров (1 ≤ n ≤ 10000). Каждая из следующих n строк содержит данные на определённого человека: его имя, название города, где он находился в первый день данного периода, и размер состояния. В следующей строке записаны два числа: m — количество дней, о которых есть данные (1 ≤ m ≤ 50000), k — количество зарегистрированных перемещений миллиардеров (0 ≤ k ≤ 50000). Следующие k строк содержат список перемещений в формате: номер дня (от 1 до m − 1), имя человека, название города назначения. Вы можете считать, что миллиардеры путешествуют не чаще одного раза в день, и что они отбывают поздно вечером и прибывают в город назначения рано утром следующего дня. Список упорядочен по возрастанию номера дня. Все имена и названия городов состоят не более чем из 20 латинских букв, регистр букв имеет значение. Состояния миллиардеров лежат в пределах от 1 до 100 миллиардов.
Результат
В каждой строке должно содержаться название города и, через пробел, количество дней, в течение которых этот город лидировал по общему состоянию миллиардеров, находящихся в нём. Если таких дней не было, пропустите этот город. Города должны быть отсортированы по алфавиту (используйте обычный порядок символов: ABC...Zabc...z).

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <cstdio>
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <functional>
 
using namespace std;
 
struct Oligarch  //структура, которая описывает олигарха 
{
    string city; //его город
    long long money; //его состояние 
    Oligarch(string c = "", long long tmp = 0) : city(c), money(tmp) {} //конструктор
};
 
struct City //структура, которая описывает город
{
    int days; //количество дней, которые город лидировал 
    long long money; //общая сумма денег миллиардеров
    City(int d = 0, long long tmp = 0) : days(d), money(tmp) {} //конструктор
};
 
map <string, Oligarch> man; //набор олигархов ключ - имя, значение - характеристики 
map <string, City> cities;  //набор городов ключ - название, значение - характеристики  
multiset<pair<long long, string>, greater<pair<long long, string>>> orderedCities; //отсортированный набор городов по деньгам, ключ - деньги, значение - название города
 
void scopy(string& str, char* p)  //метод копирования строки из char* в string
{
    while (*p) 
    {
        str += *p++;
    }
}
 
int main()
{
    char str1[30], str2[30]; //временные переменные 
    string surname, location; //фамилия и локация(место нахождения)
    int n; //количество миллиардеров
 
    scanf("%d\n", &n); //считываем количество миллиардеров
    for (int i = 0; i<n; ++i) //проходим по всем олигархам 
    {
        surname = location = ""; //обнуляем название и местоположение 
        long long m; //состояние 
        scanf("%s%s%I64d", str1, str2, &m); //считываем данные об олигархе 
        scopy(surname, str1); //копируем значение фамилии 
        scopy(location, str2);  //копируем значение города 
        man[surname] = Oligarch(location, m); //создаем олигарха с указанными характеристиками
        cities[location].money += m; //добавляем в город олигарха его деньги 
    }
 
    for (map <string, City>::iterator it = cities.begin(); it != cities.end(); ++it) //проходим по всем городам  
    {
        orderedCities.insert(make_pair(it->second.money, it->first)); //добавляем в отсортированный список деньги города и его название 
    }
 
    int m, k; //количество дней и количество зарегистрированных перемещений миллиардеров
    scanf("%d%d", &m, &k); //считываем данные 
    int curd = 0, day; //текущий день и день зарегистрированного перемещения миллиардера
 
    for (int i = 0; i<k; ++i)  //проход по всем  зарегистрированным перемещениям миллиардеров
    {
        surname = location = ""; //обнуляем название и местоположение 
        scanf("%d%s%s", &day, str1, str2); //считываем день, фамилию и местоположение 
        scopy(surname, str1); //копируем значение фамилии 
        scopy(location, str2); //копируем значение города 
        
        if (curd != day) //если день не равен текущему 
        {
            if (orderedCities.size()>1)  //если количество городов больше 1
            {
                multiset<pair<long long, string>, greater<pair<long long, string> > >::iterator it = orderedCities.begin(); //первый город в отсортированном списке 
                it++; //второй город в отсортированном списке 
                if (orderedCities.begin()->first != it->first)  //если деньги первого города не равны второму городу (есть явный лидер)
                {
                    cities[orderedCities.begin()->second].days += day - curd; //добавляем к количеству лидирующих дней разницу между текущим и предыдущим днем 
                }
            }
            else if (!orderedCities.empty())  //если один город
            {
                cities[orderedCities.begin()->second].days += day - curd; //добавляем к количеству лидирующих дней разницу между текущим и предыдущим днем 
            }
            curd = day; //устанавливаем текущий день 
        }
        
        
        //ПОЛЕТ ОЛИГАРХА 
        
        Oligarch& olig = man[surname]; //получаем олигарха по его фамилии 
        City& c1 = cities[olig.city];  //получаем город олигарха 
        City& c2 = cities[location];   //получаем город текущего местоположения олигарха
 
        orderedCities.erase(orderedCities.find(make_pair(c1.money, olig.city))); //удаляем город олигарха из отсортированного списка 
        
        multiset<pair<long long, string>, greater<pair<long long, string> > >::iterator it = orderedCities.find(make_pair(c2.money, location)); //ищем в отсортированном списке город текущего местоположения олигарха 
        if (it != orderedCities.end()) //если он был найден
            orderedCities.erase(it);   //удаляем этот город
 
        c1.money -= olig.money; //отнимаем деньги олигарха от его текущего города
        c2.money += olig.money; //суммируем его деньги в город, который он посещает
 
        //добавляем в отсортированный список города после полёта олигарха 
        orderedCities.insert(make_pair(c1.money, olig.city)); 
        orderedCities.insert(make_pair(c2.money, location));
 
        olig.city = location; //устанавливаем олигарху новый город
    }
    if (curd != m) //если текущий день не равен общему количеству дней 
    {
        if (orderedCities.size()>1) //если в отсортированном списке больше 1 города 
        {
            multiset<pair<long long, string>, greater<pair<long long, string> > >::iterator it = orderedCities.begin(); //первый город в отсортированном списке 
            it++; //второй город в отсортированном списке 
            if (orderedCities.begin()->first != it->first)  //если деньги первого города не равны второму городу (есть явный лидер)
            {
                cities[orderedCities.begin()->second].days += m - curd; //добавляем к количеству лидирующих дней разницу между всеми днями и предыдущим днем 
            }
        }
        else if (!orderedCities.empty()) //если город в списке 1
        {
            cities[orderedCities.begin()->second].days += m - curd; //добавляем к количеству лидирующих дней разницу между всеми днями и предыдущим днем 
        }
    }
 
    for (map <string, City>::iterator it = cities.begin(); it != cities.end(); ++it) //проходим по отсортированному списку городов 
    {
        if (it->second.days) //если город был лидером хотя бы 1 день 
        {
            cout << it->first << ' ' << it->second.days << '\n'; //выводим название города и количество лидирующих дней 
        }
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2019, 19:21
Ответы с готовыми решениями:

Посчитать, сколько дней в течение заданного периода каждый из городов мира был первым по общей сумме денег миллиардеров
Помогите, пожалуйста, с олимпиадной задачей Возможно, вы знаете, что из всех городов мира больше всего миллиардеров живёт в Москве....

на сколько времени хватит денег в случае получения наследства в сумме при указанных расходах
Прошу помощи в решении задачи в VB Собственно вот само условие задачи. Запрашивайте у пользователя размер наследства, которое Вы бы...

Сколько километров спортсмен пробежит в сумме за s дней?
Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Сколько...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2019, 19:21
Помогаю со студенческими работами здесь

Заполнить массив из 10 элементов, чтобы каждый элемент был равен сумме делителей своего номера
Заполнить массив из 10 элементов каждый элемент был равен сумме делителей своего номера

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

Заполнить массив N случайными числами, так чтобы каждый элемент в массиве был равен сумме элементов его соседей слева
Массивы должны быть рандомные

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

База данных городов мира
Всем привет, надо сделать что-то типа игры в города. Типо называешь город, например Лондон, то прога отвечает любой город на букву Н. ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru