М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
FCRuslanZENIT1
FCRuslanZENIT1
23.04.2020 09:11 •  Информатика

С . Задача "Выборы в США" Выборы в США
Как известно, в США президент выбирается не прямым голосованием, а путём двухуровневого голосования. Сначала проводятся выборы в каждом штате, и определяется победитель выборов в данном штате. Затем проводятся государственные выборы: на этих выборах каждый штат имеет определённое число голосов — число выборщиков от этого штата. На практике все выборщики от штата голосуют в соответствии с результатами голосования внутри штата, то есть на заключительной стадии выборов в голосовании участвуют штаты, имеющие различное число голосов.

На этот раз вам известно число выборщиков от каждого штата США и результаты голосования каждого гражданина США (а также в каком штате проживает данный гражданин).

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

Входные данные

Первая строка входных данных содержит количество штатов в США N (1≤N≤100000). Далее идёт N строк, описывающих штаты США, каждая строка состоит из названия штата и числа выборщиков от этого штата. На следующей строке задано число M (1≤M≤100000)— количество проголосовавших на выборах. В следующих M строках идут записи результатов голосования по каждому из участников голосования. Одна строка соответствует одному избирателю. Записи имеют следующий вид: название штата, имя кандидата, за которого проголосовал данный избиратель. Названия штатов и имена кандидатов не содержат пробелов.

Выходные данные

Выведите список кандидатов, упорядоченный по убыванию числа голосов выборщиков, полученных за данного кандидата, а при равенстве числа голосов выборщиков — в лексикографическом порядке. После имени кандидата выведите число набранных им голосов.

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

Гарантируется, что в каждом штате проголосовал хотя бы один избиратель.

Примечание к примерам тестов

В Florida 2 избирателя голосует за Gore и три избирателя за Bush, поэтому 25 голосов выборщиков от Florida получает Bush. В Pennsylvania побеждает Gore (5 голосов против 1), поэтому Gore получает 23 голоса выборщиков от Pennsylvania.

В Florida побеждает Gore (5 голосов выборщиков), в Alaska — Bush (2 голоса выборщиков). В Pennsylvania два кандидата набрали наибольшее число голосов (по 1), поэтому 4 голоса выборщиков от этого штата получает Clinton, т.к. он идет раньше в лексикографическом порядке.

Примеры
Ввод
Вывод
2
Florida 25
Pennsylvania 23
11
Florida Gore
Pennsylvania Gore
Florida Bush
Pennsylvania Gore
Pennsylvania Bush
Florida Gore
Pennsylvania Gore
Florida Bush
Pennsylvania Gore
Florida Bush
Pennsylvania Gore

Bush 25
Gore 23
3
Florida 5
Pennsylvania 4
Alaska 3
4
Florida Gore
Pennsylvania Obama
Pennsylvania Clinton
Alaska Bush

Gore 5
Clinton 4
Bush 3
Obama 0

👇
Ответ:

Опубликовал решение на PasteBin и тут, поскольку суда криво копируются символы таба, и потом нельзя нормально скопировать код. https://pastebin.com/kWSChLsh

#include <algorithm>

#include <iostream>

#include <string>

#include <vector>

using namespace std;

struct State {

vector<pair<string, int>> candidates; // кандидаты в этом штате

string state; // название штата

int weight; // "вес" штата

State(string state = " ", int weight = 0) : state(state), weight(weight) {

}

void vote(string candidate) { // принимаем голос избирателя

 if (candidates.size() == 0) {

  candidates.push_back({ candidate, 1 });

  return;

 }

 for (int i = 0; i < candidates.size(); ++i) {

  if (candidates[i].first == candidate) {

   ++candidates[i].second;

   break;

  }

  else if (i == candidates.size() - 1) {

   candidates.push_back({ candidate, 0 });

  }

 }

}

string getResultOfElections() {

 if (candidates.size() == 1) {

  return candidates[0].first;

 }

 sort(candidates.begin(), candidates.end(), // сортировка по голосам

  [](pair<string, int>& a, pair<string, int>& b) {

   return (a.second > b.second);

  });

 int last = -1;

 for (int i = 1; i < candidates.size(); ++i) { // убираем проигравших

  if (candidates[i].second != candidates[0].second) {

   last = i;

   break;

  }

 }

 if (last != -1)

  candidates.erase(candidates.begin() + last);

 sort(candidates.begin(), candidates.end(), // лексографическая сортировка

  [](pair<string, int>& a, pair<string, int>& b) {

   return strcmp(a.first.c_str(), b.first.c_str()) < 0;

  });

 return candidates[0].first; // победитель

}

};

int main() {

setlocale(LC_ALL, "Russian");

cout << "Введите количество штатов: ";

vector<State> states;

int nOfStates = 0;

cin >> nOfStates;

cin.ignore();

cout << "Введите данные о состоянии штатов в формате Название_штата Значимость_Штата: ";

for (int i = 1; i <= nOfStates; ++i) {

 string input, buffer, name, weight;

 getline(cin, input);

 name = input.substr(0, input.find(' '));

 weight = input.substr(input.find(' '));

 states.push_back(State(name, stoi(weight)));

}

cout << "Количество голосов: ";

int nOfVotes = 0;

cin >> nOfVotes;

cin.ignore();

cout << "Данные о голосах в формате Штат Кандидат: ";

for (int i = 0; i < nOfVotes; ++i) {

 string input, state, candidate;

 getline(cin, input);

 state = input.substr(0, input.find(' '));

 candidate = input.substr(input.find(' ') + 1);

 for (int j = 0; j < nOfStates; ++j) {

  if (states[j].state == state) {

   states[j].vote(candidate);

  }

 }

}

vector<pair<string, int>> winners;

for (int i = 0; i < states.size(); ++i) {

 string result = states[i].getResultOfElections();

 if (winners.size() == 0) {

  winners.push_back({ result, states[i].weight });

  continue;

 }

 for (int j = 0; j < winners.size(); ++j) {

  if (winners[j].first == result) {

   winners[j].second += states[i].weight;

   break;

  }

  else if (j == winners.size() - 1) {

   winners.push_back({ result, 0 });

  }

 }

}

cout << endl;

for (int i = 0; i < winners.size(); ++i) {

 cout << winners[i].first << " " << winners[i].second << endl;

}

}

4,7(90 оценок)
Открыть все ответы
Ответ:
Tochi1
Tochi1
23.04.2020
Судя по полагается то ,  что они играли не зависимо за какую именно .  посчитаем сколько вообще было встреч , у команды первой лиги команд в 2 раза больше так как    .  посчитаем отдельно каждую встречу внутри команд ,и между разными .    по первой лиги это число сочетаний по высшей лиги это число сочетаний а между собой очевидно в сумме встреч.  если не было ничьи то очевидно одно из двух  1) либо   команда проиграет  2) либо команда выиграет  число выигрышей и проигрышей будет равна количеству сыгранных игр . то есть если всего у команда  побед то  пусть количество выигрышей команды первой лиги равна  , то другой что бы число делилось на 8 , очевидно что n либо само должно быть кратно 8 , либо     должно делится на 8 , подходит   при нем все выполняется 
4,7(67 оценок)
Ответ:
kashlakova20031
kashlakova20031
23.04.2020

ответ:

uses graphabc;

var xx,yy,u: integer;

procedure growl(x,y,r: integer);

var i: byte;

begin

for i: =1 to r do

    begin

    circle(x,y,i);

    sleep(5);

    end;

end;

procedure growr(x,y: integer);

var i: byte;

begin

for i: =1 to 20 do

    begin

    ellipse(x-5,y-(i),x-(i*3),y+(i));

    ellipse(x+5,y-(i),x+(i*3),y+(i));

    ellipse(x-(i),y-5,x+(i),y-(i*3));

    ellipse(x-(i),y+5,x+(i),y+(i*3));

    sleep(3);

    end;

end;

procedure fall;

var r,prer,i: byte;

    x,y: integer;

begin

for i: =1 to 10 do

    begin

x: =random(160)-80+windowwidth div 2;

prer: =0;

r: =random(10)+10;

for y: =80+windowheight div 2 to windowheight+30 do

    begin

    setpencolor(clwhite);

    circle(x,y-1,prer);

    setpencolor(clblack);

    circle(x,y,r);

    prer: =r;

    sleep(3);

    end;

    end;

end;

procedure growd (x,y: integer);

var i: byte;

begin

for i: =20 downto 5 do

    begin

    clearwindow;

    setbrushcolor(clgreen);

    ellipse(x-5,y-(20),x-(60),y+(20));

    ellipse(x+5,y-(20),x+(60),y+(20));

    ellipse(x-(20),y-5,x+(20),y-(60));

    ellipse(x-(20),y+5,x+(20),y+(60));

    setbrushcolor(rgb(255,255-((20-i)*10),255-((20-i)*;

    circle(x-i,y-i,i);

    circle(x+i,y-i,i);

    circle(x+i,y+i,i);

    circle(x-i,y+i,i);

    sleep(5);

    end;

end;

var j: integer;

begin

repeat

setbrushcolor(clgreen);

growr(windowwidth div 2,windowheight div 2);

setbrushcolor(clwhite);

for j: =1 to 360 do

    if j mod 10=0 then

    begin

        xx: =round(windowwidth div 2+20*cos(pi*(u+(j*10))/180));

        yy: =round(windowheight div 2+20*sin(pi*(u+(j*10))/180));

    growl(xx,-j) div 10));

    end;

sleep(100);

fall;

growd (windowwidth div 2,windowheight div 2);

sleep(100);

until false;

end.

объяснение:

4,8(74 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ