Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 129

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

10.11.2019, 19:21. Показов 1183. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru