ГЖО 7-8 класс 2019 год


Задача F. UCL Fantasy

Ограничение по времени:
1 секунда
Ограничение по памяти:
256 мегабайт

Недавно Данияр начал увлекаться футболом. И сразу начал играть UCL Fantasy. Правила простые, каждый игрок собирает себе команду из 15 игроков(2 вратаря, 5 защитников, 5 полузащитников, 3 нападающих) играющих в Лиге чемпионов УЕФА. Каждый игрок за тур получает какие-то баллы в зависимости как он сыграл. Баллы можно получить за гол, за голевой пас, вратарю за сухую игру, отрицательный балл за удаления и т.д. Перед каждым туром Данияр выбирает состав на тур, состоящий из 11 игроков и среди них выбирает капитана. В составе всегда должен быть ровно один вратарь, и возможны следующие схемы: 5(защитника)-4(полузащитника)-1(нападающий), 5-3-2,5-2-3,4-5-1,4-4-2,4-3-3,3-5-2,3-4-3. Тогда очки Данияра, это будет сумма баллов его состава(11 игроков) + баллы его капитана(т.е баллы капитана удваиваются). Данияр знает баллы всех своих игроков, помогите ему выбрать состав на тур, чтобы максимизировать количество его очков.
Формат входного файла
В 15 строках находятся информация о игроках: $name_i(1 <= |name_i| <= 20)$,$position_i$ и $p_i(-10 <= p_i <= 100)$ — имя или фамилия игрока, позиция в которой он играет и его баллы за тур. Гарантируется, что 2 вратаря, 5 защитников, 5 полузащитников, 3 нападающих. $position_i$ может быть одной из : GK — вратарь, DF — защитник, MF — полузащитник, FW — нападающий.
Формат выходного файла
Выведите, максимальное количество очков, которые может получить Данияр.
Пример:
Вход
Messi FW 10
Pique DF 6
Tadic FW 2
Coutinho MF 3
Stegen GK 7
Salah MF 2
Ziyech MF 6
Onana GK 6
Beek MF 8
Son MF 0
Alba DF 8
Suarez FW 8
Blind DF 6
Ligt DF 6
Roberto DF 6
Ответ
84
Замечание
Messi будет капитаном и состав будет таким:

( Temirlan Satylkhanov )
посмотреть в олимпиаде

Комментарий/решение:

  -1
2019-05-24 14:03:43.0 #

решение проста

показать/скрыть код

#include<bits/stdc++.h>

#define ll long long

#define N 300005

#define MAX 1000000000

#define rt return

#define pr printf

#define vec vector

#define pb push_back

#define sz size()

#define rev reverse

#define srt sort

#define cn continue

#define sc scanf

#define pll pair< ll, ll >

#define ff first

#define ss second

#define dd long double

#define SS stringstream

#define graph g[ a ].pb( b ), g[ b ].pb( a )

#define pause system("PAUSE")

#define off exit( 0 )

#define speed ios_base::sync_with_stdio(); cin.tie(0); cout.tie(0)

using namespace std;

string n, p;

ll a1, b1, c1, m, s, gk, q, w, e, r, t, y, u;

vector< ll > g, d, o, f, a;

int main()

{

for( ll i = 0; i < 15; i ++ )

{

cin >> n >> p >> m;

if( p == "FW" ) f.pb( m );

else if( p == "DF" ) d.pb( m );

else if( p == "GK" ) g.pb( m );

else if( p == "MF" ) o.pb( m );

}

srt( g.rbegin(), g.rend() );

srt( d.rbegin(), d.rend() );

srt( o.rbegin(), o.rend() );

srt( f.rbegin(), f.rend() );

gk = g[ 0 ];

q = gk + d[ 0 ] + d[ 1 ] + d[ 2 ] + d[ 3 ] + d[ 4 ] + o[ 0 ] + o[ 1 ] + o[ 2 ] + f[ 0 ] + f[ 1 ];

w = gk + d[ 0 ] + d[ 1 ] + d[ 2 ] + d[ 3 ] + d[ 4 ] + o[ 0 ] + o[ 1 ] + f[ 0 ] + f[ 1 ] + f[ 2 ];

e = gk + d[ 0 ] + d[ 1 ] + d[ 2 ] + d[ 3 ] + o[ 0 ] + o[ 1 ] + o[ 2 ] + o[ 3 ] + o[ 4 ] + f[ 0 ];

r = gk + d[ 0 ] + d[ 1 ] + d[ 2 ] + d[ 3 ] + o[ 0 ] + o[ 1 ] + o[ 2 ] + o[ 3 ] + f[ 1 ] + f[ 0 ];

t = gk + d[ 0 ] + d[ 1 ] + d[ 2 ] + d[ 3 ] + o[ 0 ] + o[ 1 ] + o[ 2 ] + f[ 2 ] + f[ 1 ] + f[ 0 ];

y = gk + d[ 0 ] + d[ 1 ] + d[ 2 ] + o[ 0 ] + o[ 1 ] + o[ 2 ] + o[ 3 ] + o[ 4 ] + f[ 0 ] + f[ 1 ];

u = gk + d[ 0 ] + d[ 1 ] + d[ 2 ] + o[ 0 ] + o[ 1 ] + o[ 2 ] + o[ 3 ] + f[ 0 ] + f[ 1 ] + f[ 2 ];

cout << max( { q, w, e, r, t, y, u } ) + max( { gk, d[ 0 ], o[ 0 ], f[ 0 ] } );

}

  0
2021-10-28 18:08:23.0 #

#include <bits/stdc++.h>

using namespace std;

int main()

{

int p, k=0;

string name, position;

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

cin >> name >> position >> p;

k +=p;

}

cout << k;

}