Submission #1193704

#TimeUsernameProblemLanguageResultExecution timeMemory
1193704avighnaSnail (NOI18_snail)C++20
37 / 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 + (max_sum.first - 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...