1282C Codeforces. Петька и экзамен (жадный)

Ссылка: https: //codeforces.com/contest/1282/problem/C

Значение вопросов: человек, чтобы сдать экзамен, экзамен только два вопроса, один на простые вопросы, каждый вопрос отнимает много времени пофиксить, а другой трудные вопросы, каждый вопрос отнимает много времени фиксированного б, чтобы гарантировать, что Ь> а. Решить оценка проблемы является 1. Правила письменного экзамена не только вопросы и т.д., сколько, чтобы поощрять назначение заранее. Если вы не имеете задание загодя, то есть часть названия будет отображаться как «обязательно делать проблему», когда «должен сделать вопрос» в теме не будет полностью завершен, этот курс, даже если 0, в противном случае, количество вопросов, чтобы получить тот же счет, в том числе и «должен делать» и «несущественные делать».

Смысл проблем: Это ясный смысл вопросов, необходимых по названию «должны сделать время» в порядке возрастания, затем жадные делают, должен делать с самого начала времени, пересекающим каждый вопрос. Если траверс я-й титул, текущее время T, то T-1, если задание в то время, сначала необходимо поставить перед всеми вопросами должны делать сделано, предполагая, что этот процесс занимает время Ti, то остальную часть Т - Ti время, то мы жадные в оставшееся время как можно больше, чтобы сделать первый с остальным простым вопросом, сделать головоломки, записанные в это время ANS, по-прежнему через все темы должны сделать время, в конце концов, постоянно обновляемый анс максимум. Окончательный анс ответ

AC код:

1 #include <iostream>
 2 #include < строка >
 3 #include <вектор>
 4 #include <CString>
 5 #include <cstdio>
 6 #include <Алгоритм>
 7 с  использованием  пространства имен STD;
8 ЬурейеЕ долго  долго LL;
9 LL мод = 1e9 + 7 ;
10  Const  INT maxn = 2e5 + 10 ;
11  структура узла {
 12      INT диф;
13      ИНТ ти;
14  } г [maxn];
15 BOOL CMP (узел а, узел б) {
 16 ,      если (a.ti = b.ti!) возвращение a.ti < b.ti;
17      возврата a.dif < b.dif; 
18  }
 19  INT основных () {
 20      INT д; CIN >> д;
21 в      то время как (q-- ) {
 22          LL п, т, а, б;
23          CIN >> п >> т >> A >> б;
24          LL CNTA = 0 , cntb = 0 ;
25          для ( Int I = 1 ; я <= п; я ++ ) {
 26              INTТД; КИН >> Td;
 27              ПЧ (ТД == 0 ) CNTA ++ ;
 28              остальное CNTB ++ ;
 29              G [I] , .dif = TD;
 30          }
 31          для ( INT I = 1. , Я <= п, я ++ ) {
 32              INT Т; КИН >> Т;
 33              G [I] , .ti = Т;
 34          }
 35          Сортировка (G + . 1 , п + G + 1. , СМР); // время прессования будет делать для сортировки 
36          G [п + 1. ] .ti Т + = 1 .;
 37 [          LL АНС = 0 , С1 = 0 , С2 = 0 ; // C1 - C2 - сосчитать число будет делать при условии 
38          для ( INT I = 1. ; I <= п + 1. , Я ++ ) {
 39              LL CUR = A * С1 * в + С2;
 40              раз LL = G [I] .ti - . 1 - CUR; // будет делать время , необходимое для субъекта 
41              IF (время> = 0 ) { // Если есть дополнительное время, как это делают более более простые вопросы, проблемы делают 
42                  МР ТП = мин (Время / а, cnta- С1);
 43                  Time- ТА * = а;
44                  LL Тв = мин (время / б, cntb- с2);
45                  ANS = макс (ANS, с1 + с2 + ТА + ТБ);
46              }
 47 ,              если (г [я] .dif == 0 ) с1 ++ ;
48              еще c2 ++ ;
49          }
 50          COUT << ANS << ENDL;
51      }
 52      возврата  0 ;
53 }

рекомендация

отwww.cnblogs.com/AaronChang/p/12130163.html