Submission #1087249

#TimeUsernameProblemLanguageResultExecution timeMemory
1087249akim9905Toilets (JOI16_toilets)C++17
100 / 100
18 ms6924 KiB
#include <iostream> #include <vector> #include <string> #include <algorithm> int main() { // speed up std::cin & std::cout std::ios::sync_with_stdio(false); long long N; int M; std::vector<std::string> S; std::vector<long long> K; std::cin >> N >> M; for(int i = 0; i < M; ++i) { std::string S_i; long long K_i; std::cin >> S_i >> K_i; S.push_back(S_i); K.push_back(K_i); } long long minimum = 0; long long global_count = 0; for(int section = M - 1; section >= 0; --section) { const std::string& S_i = S[section]; const long long K_i = K[section]; int local_count = 0, diff_minimum = 0; for(int index = S_i.size() - 1; index >= 0; --index) { const char c = S_i[index]; local_count += (c == 'F' ? 1 : -1); diff_minimum = std::min(diff_minimum, local_count); } const long long candidate_first = global_count + diff_minimum; const long long candidate_last = global_count + (K_i - 1) * local_count + diff_minimum; minimum = std::min(minimum, std::min(candidate_first, candidate_last)); global_count += local_count * K_i; } long long answer; // global_count = |female| - |male| if(global_count < 0) { answer = -1; } else { if(minimum >= -1) { answer = 0; } else { answer = -(minimum + 1); } } std::cout << answer << std::endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...