제출 #1193706

#제출 시각아이디문제언어결과실행 시간메모리
1193706avighnaSnail (NOI18_snail)C++20
100 / 100
1 ms328 KiB
#include <bits/stdc++.h> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int64_t h; int n; std::cin >> h >> n; std::vector<int64_t> p(n); for (auto &i : p) { std::cin >> i; } int64_t cur = 0; std::vector<bool> seen(n); int64_t orig = -1; for (int64_t day = 0;; day++) { bool seen_anything = false; for (int i = 0; i < n; ++i) { if (cur == 0 and seen[i]) { std::cout << "-1 -1\n"; return 0; } if (cur == 0) { seen[i] = seen_anything = true; } if ((cur = std::max(int64_t(0), cur + p[i])) >= h) { std::cout << day << ' ' << i << '\n'; return 0; } } orig++; if (!seen_anything) { break; } } int64_t sum = cur; std::pair<int64_t, int> max_sum = {-1, -1}; for (int i = 0; i < n; ++i) { sum += p[i]; max_sum = std::max(max_sum, {sum, i}); } auto ceil_div = [](int64_t a, int64_t b) { return (a + b - 1) / b; }; int64_t day = ceil_div(h - cur - (max_sum.first - cur), sum - cur) + 1; int64_t cur_pos = cur + (sum - cur) * (day - 1); for (int i = 0; i < n; ++i) { cur_pos += p[i]; if (cur_pos >= h) { std::cout << day + orig << ' ' << i << '\n'; return 0; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...